Javascript -仅允许选定特殊字符的正则表达式

7xzttuei  于 2022-12-10  发布在  Java
关注(0)|答案(3)|浏览(167)

我想只允许像?*=.@#$%!^":,:;<'>+-_这样的文本中的特定特殊字符。
我试过下面的:

pattern = new RegExp(/^(?=.*?[?*=.@#$%!^":,:;<'>+-_])/);

它似乎不工作,似乎通过,即使我输入了一个特殊字符以外的上述指定。我错过了什么吗?
例如:

var sampleText: string = "TestSample&123"

上面的例子应该抛出我一个错误和失败,因为我没有使用任何特殊字符,这是指定的模式。

2eafrhcq

2eafrhcq1#

根据所需的字符集和the approach from this answer here about exclusive sets in Regex,您应该能够执行以下操作:

const testPattern = /^[?*=.@#$%!^":,;<'>+\-_]+$/;

console.log(testPattern.test('?*+@!')); // passes
console.log(testPattern.test('TestSample&123')); // fails
cbjzeqam

cbjzeqam2#

几件事:

  • Javascript有正则表达式文字,所以可以用var regex = /^(?=.*?[?*=.@#$%!^":,:;<'>+-_])/代替new Regex(...)
  • https://regex101.com/是一个非常有用的资源,可以帮助你理解正则表达式。
  • 正则表达式开头的^将匹配锚定到字符串的开头,但您没有相应的$来确保匹配适用于整个字符串。
  • (?=.*?是一个正向前查找函数,它可以对任意数量的任意字符进行运算。当你想要匹配所有字符时,你所拥有的字符组[...]只匹配一个字符。

Rahul在我打字的时候就已经回答了他的表达方式很正确

^[?*=.@#$%!^":,:;<'>+-_]*$

^将匹配定位到字符串的开头,$将匹配的结尾定位到字符串的结尾。[...]*将匹配任意数量的字符,只要它们属于该字符集。
你可以把它写成一个JS变量

var myRegex = /^[?*=.@#$%!^":,:;<'>+-_]*$/
ss2ws0br

ss2ws0br3#

您可以尝试使用下面的正则表达式:

const str = /^[a-zA-Z0-9?*=.@#$%!^":,:;<'>+-_]+$/;
    
    console.log(str.test('TestSample&123'));

相关问题