Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个JavaScript正则表达式与下划线匹配?_Javascript_Regex - Fatal编程技术网

为什么这个JavaScript正则表达式与下划线匹配?

为什么这个JavaScript正则表达式与下划线匹配?,javascript,regex,Javascript,Regex,我尝试使用以下JavaScript RE来匹配字符串,其中允许的字符是大写或小写字母、数字、hypens(-)和句点()。不允许下划线“\u1”: pattern = /^([a-zA-z0-9\-\.]+)$/ 但当我在Chrome控制台中运行测试时: 模式测试(“_linux”) 结果是正确的,但根据我们的规则应该是错误的。原因是什么?在您的正则表达式中,您已经编写了A-z(末尾是小写的z)。在JavaScript正则表达式引擎中,这将转换为字符代码65到122,而不是所需的65到90。下

我尝试使用以下JavaScript RE来匹配字符串,其中允许的字符是大写或小写字母、数字、hypens(-)和句点()。不允许下划线“\u1”:

pattern = /^([a-zA-z0-9\-\.]+)$/
但当我在Chrome控制台中运行测试时: 模式测试(“_linux”)


结果是正确的,但根据我们的规则应该是错误的。原因是什么?

在您的正则表达式中,您已经编写了
A-z
(末尾是小写的
z
)。在JavaScript正则表达式引擎中,这将转换为字符代码65到122,而不是所需的65到90。下划线字符在此范围内(字符代码95);看一看。将其更改为大写Z,使您的正则表达式:

^([a-zA-Z0-9\-\.]+)$

打字
A-z
应该是
A-z
。注意:
不必在字符类内转义。请阅读@FelixKling Seconded第2.1节第1点,第四版第149页中的
-
,“.”具有特殊含义,前面应加“\”。但是我在Chrome上测试过,如果你不加“\”的话,它可以正常工作。对于“-”不需要它。为了方便程序员,如果您不知道是否应该添加“\”,是否最好添加“\”?我犯了一个粗心的错误。多谢各位!