正则表达式允许特殊字符

时间:2016-12-19 16:50:42

标签: javascript regex

我使用在线正则表达式检查程序(例如regex101)来检查我的正则表达式,这些正则表达式将由javascript使用,例如(正在工作,但仅限于正则表达式)

state = /^[a-zA-Z0-9]$/.test($(control).val())

我的正则表达式

(?=.*[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]在这方面应该更严格,并删除了时间和空间,看看这是否是原因,无济于事。

我在哪里出错,允许使用特殊字符?

1 个答案:

答案 0 :(得分:2)

您需要删除您认为之前匹配的最后一个.,它实际上匹配除换行符之外的任何字符,因此这就是!正在经历。

因此(?=.*[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}$

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

如果您想在regex101 here

中测试此版本的正则表达式