繁体   English   中英

我想在使用javascript正则表达式时忽略方括号

[英]I want to ignore square brackets when using javascript regex

我正在使用javascript正则表达式进行一些数据验证并指定我想接受的字符(我想接受任何字母数字字符,空格和以下内容!&,'\\-以及我可能会在以后添加的更多内容需要)。 我的代码是:

var value = userInput;
var pattern = /[^A-z0-9 "!&,'\-]/;
if(patt.test(value) == true) then do something

它工作正常,并排除了我不希望用户输入的字母,除了方括号和插入符号。 从我读过的所有javascript正则表达式教程中,它们都是特殊字符 - 括号表示它们之间的任何字符和此实例中的插入符号意味着任何不在方括号之间的字符。 我在这里和谷歌搜索了解为什么这些字符也被接受但无法找到解释。

所以任何人都可以帮忙,为什么我的输入接受方括号和插入符?

原因是你使用的是Az而不是A-Za-z。 Z(0x5a)和a(0x61)之间的ascii范围包括方括号,插入符号,反引号和下划线。

你的正则表达式与你说的不一致:

我想接受任何字母数字字符,空格和以下内容!&,'\\ - 以及如果需要我稍后会添加更多内容

如果你想接受那些字符,你需要删除插入符:

var pattern = /^[A-Za-z0-9 "!&,'\\-]+$/;

笔记:

  1. Az还包括角色:

      [\\] ^ _` 

    使用A-Za-z或使用i修饰符仅匹配字母:

     var pattern = /^[a-z0-9 "!&,'\\\\-]+$/i; 
  2. \\-只是字符-因为反斜杠将作为转义的特殊字符。 使用\\\\允许反斜杠。

  3. ^$是锚,用于匹配字符串的开头和结尾。 这可确保整个字符串与正则表达式匹配。

  4. +在字符类之后用于匹配多个字符。


如果你的意思是你想匹配比你接受和使用是为了防止进入“禁止”字符的用户之外其他字符,则第一个音符上面描述您的问题。 使用A-Za-z代替Az (第二个音符也相关)。

我不确定你想要什么,但我不认为你现在的正则表达式符合你的想法:

它试图找到一个字符不是A-z0-9 "!&,'\\-^表示not )。

另外,我甚至不确定Az匹配的是什么。 它是azAZ

因此,您当前的正则表达式匹配"."字符串"." "Hi." 但不是"Hi"

试试这个: var pattern = /[^\\w"!&,'\\\\-]/;

注意:\\ w还包含_ ,所以如果你想避免那么试试

var pattern = /[^a-z0-9"!&,'\\-]/i;

我认为你的正则表达式的问题是Az被理解为0x41(65)和0x7A(122)之间的所有字符,其中包括AZ和az之间的字符[] ^ _。 (Z为0x5A(90),a为0x61(97),这意味着前面的字符占用0x5B到0x60)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM