仅适用于Ascii的正则表达式

时间:2018-05-11 23:53:21

标签: regex

我正在尝试开发一个需要以下条件的密码验证正则表达式,

  • 1大写
  • 1个数字
  • 8-45长度
  • 仅在OWASP list
  • 中指定的Ascii

我提出了这个前瞻性的正则表达式,但不幸的是它似乎不适用于非ascii字符。

^(?=.*[A-Z])(?=.*\d)(?=[\x20-\x7E]).{8,45}$

经过测试,

ABCD1234abcd!" #$%&'()*+,-./:;<=>?@[\]^_`{|}~ 

然而,似乎不能使用非ascii字符,即它仍然匹配非ascii字符,尽管\x20-\x7E

ABCD1234abcd!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~£

请注意,我也希望包含空格。

我在这里做错了什么显而易见的事情?

1 个答案:

答案 0 :(得分:3)

你的正则表达式允许任何字符通过点.。您的前瞻只需要第一个字符为ascii。

将点更改为ascii范围:

^(?=.*[A-Z])(?=.*\d)[\x20-\x7E]{8,45}$