Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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使用,例如(工作但只减少正则表达式示例) 我的正则表达式是 (?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9].{5,19} 如果把它切成小块,就意味着 (?=.*[A-Z]) - Must include an Upper case char (?=.*[0-9]) - Must include a numeric [a-zA-Z0-9. ] - Can include any lowe

我正在使用一个在线正则表达式检查器来检查我的正则表达式,它将由javascript使用,例如(工作但只减少正则表达式示例)

我的正则表达式是

(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9].{5,19}
如果把它切成小块,就意味着

(?=.*[A-Z])  - Must include an Upper case char
(?=.*[0-9])  - Must include a numeric 
[a-zA-Z0-9. ]  - Can include any lower  or upper case char, or Numeric, a period or space
.            - Matching previous
{5,19}       - the string must be 6-20 characters in length
但是,这仍然允许使用特殊字符,例如

我没有使用\d表示小数,因为我认为[0-9]在这方面应该更严格,并删除了句点和空格,以确定这是否是原因,但没有用


允许使用特殊字符哪里出了问题?

您需要删除最后一个
,您认为它与上一个匹配,它实际上与除换行符以外的任何字符都匹配,所以这就是问题所在!正在通过

所以
(?=.[A-Z])(?=.[0-9])[A-zA-Z0-9]。{5,19}
应该是
(?=.[A-Z])(?=.[0-9])[A-zA-Z0-9]{5,19}

我还想提一下
\d
[0-9]
之间没有任何区别

已更新-以下内容将修复您在正则表达式中看到的问题-
(?=.[A-Z])(?=.[0-9])[A-zA-Z0-9\.\s]{6,20}$

  • 添加了
    \。
    (以允许使用。)
  • 添加了
    \s
    (允许空白字符)
  • {5,19}
    更改为
    {6,20}$
    ,以确保正确的字符匹配

如果要在regex101中测试此版本的正则表达式

请删除“匹配”前一行中的
,该
匹配除新行之外的任何单个字符,新行与
匹配-试试这个-
(?=.[A-Z])(?=.[0-9])[A-zA-Z0-9]{5,19}
。而且\d与[0-9]
完全相同
匹配任何字符,而不是“previous”。如果您实际使用的是regex101.com:,它会告诉您:“.{5,19}匹配任何字符(行终止符除外)”为快速回复干杯@MarkWalters,因为你只是第一个,所以请随意发布分数的答案。再次感谢。不知道我从哪里得到这个点子的@MikeMcCaughan-我都没注意到。我猜有“使用它”和“正确使用它”。谢谢:)实际上,
\d
[0-9]
之间是有区别的<代码>\d
速度较慢,因为它还考虑了其他语言中的数字。这是一个很好的解释。@juanlu实际上刚刚读了这个-。JavaScript中不支持Unicode正则表达式匹配,因此\d相当于JS中的[0-9]。有趣的是,在测试了更多内容后,您的答案似乎只检查了前5个字符。A1CDE匹配,但A1CDE也匹配!,虽然是A1C!DE失败,因为它只匹配前5个..@MarkWalters您完全正确,JS似乎不支持它。很高兴知道!你有没有办法在那里输入链接描述?
(?=.*[A-Z])  - Must include an Upper case char
(?=.*[0-9])  - Must include a numeric 
[a-zA-Z0-9. ]  - Can include any lower  or upper case char, or Numeric, a period or space
.            - Matching previous
{5,19}       - the string must be 6-20 characters in length