我使用在线正则表达式检查程序(例如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]在这方面应该更严格,并删除了时间和空间,看看这是否是原因,无济于事。
我在哪里出错,允许使用特殊字符?
答案 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
中测试此版本的正则表达式