我想在使用javascript正则表达式时忽略方括号
我正在使用javascript正则表达式进行一些数据验证,并指定我想要接受的字符(我想要接受任何字母数字字符、空格和下面的我想在使用javascript正则表达式时忽略方括号,javascript,regex,Javascript,Regex,我正在使用javascript正则表达式进行一些数据验证,并指定我想要接受的字符(我想要接受任何字母数字字符、空格和下面的!&,'\-,如果需要的话,可能还会再加上一些)。我的代码是: var value = userInput; var pattern = /[^A-z0-9 "!&,'\-]/; if(patt.test(value) == true) then do something 它工作正常,排除了我不希望用户输入的字母,除了方括号和插入符号。从我读过的所有javascri
!&,'\-
,如果需要的话,可能还会再加上一些)。我的代码是:
var value = userInput;
var pattern = /[^A-z0-9 "!&,'\-]/;
if(patt.test(value) == true) then do something
它工作正常,排除了我不希望用户输入的字母,除了方括号和插入符号。从我读过的所有javascript正则表达式教程中,它们都是特殊字符——括号表示它们之间的任何字符,在本例中,插入符号表示不在方括号之间的任何字符。我在这里和谷歌上搜索了关于为什么这些字符也被接受的解释,但找不到解释
有人能帮忙吗,为什么我的输入接受方括号和插入符号?我不确定你想要什么,但我不认为你当前的regexp做了你认为它做的事情: 它试图找到一个字符不是
A-z0-9”!&,\-
(^
表示不是)
另外,我甚至不确定A-z与A-z
匹配的是什么。要么是A-z
,要么是A-z
因此,您当前的regexp匹配字符串,如“
和“Hi”。
但不匹配“Hi”
尝试以下操作:var模式=/[^\w”!&,\\-]/代码>
注意:\w还包括。
,因此如果您想避免这种情况,请尝试
var pattern = /[^a-z0-9"!&,'\\-]/i;
我认为正则表达式的问题在于A-z被理解为0x41(65)和0x7A(122)之间的所有字符,其中包括A-z和A-z之间的字符[]^`。(Z是0x5A(90),a是0x61(97),这意味着前面的字符占用0x5B到0x60)。您的正则表达式与您所说的不一致:
我想接受任何字母数字字符、空格和以下内容!&,'\-如果需要的话,我以后会补充一些
如果只接受这些字符,则需要删除插入符号:
var pattern = /^[A-Za-z0-9 "!&,'\\-]+$/;
注:
A-z
还包括以下字符:
[\]^_`
\-
只是字符-
,因为反斜杠将充当转义的特殊字符。使用\\
允许使用反斜杠
^
和$
是锚定,用于匹配字符串的开头和结尾。这确保整个字符串与正则表达式匹配
+
在字符类之后用于匹配多个字符
如果您的意思是希望匹配除您接受的字符以外的字符,并使用它来防止用户输入“禁止”字符,那么上面的第一个注释描述了您的问题。使用A-Za-z
而不是A-z
(第二个注释也是相关的)。原因是您使用的是A-z而不是A-Za-z。Z(0x5a)和a(0x61)之间的ascii范围包括方括号、插入符号、反引号和下划线。您的意思是要将方括号作为无效字符进行验证?我认为不需要+字符(也不需要锚),因为他使用的是测试方法,该方法只检查是否存在匹配。@Alex是的,后来我才意识到这一点,这就是为什么我在回答中添加了第二部分。我留下了第一部分,除了使用.match()
方法外,它做了同样的事情。太好了,谢谢你的解释,它很有魅力!
var pattern = /^[a-z0-9 "!&,'\\-]+$/i;