我为密码feild的表单验证创建了这个正则表达式
"/^[[A-Za-z0-9]+[A-Za-z0-9, .!@#$%^&*()_]*]{3,25}$/",
它接受所有字母数字字符和特殊字符但仅限特殊字符是不可接受的。
问题在于长度检查:(
应该如下
Valid: aaaaaaaaa
Valid: 111111111
Valid: 11111n11111
Valid: nnnn1jkhuig
InValid: @@@@@@@@
但它在
上抛出错误aaaaaaaaaaaa
以及
答案 0 :(得分:4)
^(?=.*[A-Za-z0-9])[A-Za-z0-9, .!@#$%^&*()_]{6,25}$
(Tested with PHP)。解释:
[A-Za-z0-9, .!@#$%^&*()_]
匹配6到25个字符[A-Za-z0-9]
中的某处必须存在(确保字符串不是由特殊字符仅组成)。答案 1 :(得分:2)
您可以使用零宽度正断言来解决此问题。这是正则表达式,我将在下面解构它。
/(?=.*[A-Za-z0-9])[A-Za-z0-9, .!@#$%^&*()_]{3,25}/
第一个组件是(?=.*[A-Za-z0-9])
。构造(?=...)
是零宽度断言,意味着它会检查某些内容,但不会“吃掉”任何输出。如果“...”部分匹配,则断言通过并继续正则表达式。如果它不匹配,则断言失败,并且正则表达式返回不匹配。在这种情况下,我们的“......”是“。* [A-Za-z0-9]”,它只是说“检查那里某处存在的字母数字字符,我们不知道”关心“。
下一个组件是[A-Za-z0-9, .!@#$%^&*()_]{3,25}
,只是说要匹配任何有效的3到25个字符。我们已经知道,至少其中一个是字母数字,因为我们的前瞻性断言,所以这已经足够了。
答案 2 :(得分:1)
你不能嵌套角色类,但我认为你的意思是
/^([A-Za-z0-9]+[A-Za-z0-9, .!@#$%^&*()_]*){3,25}$/
但这也行不通,因为量词{3,25}
也不能嵌套。
试试这个
^(?=.{3,25})[A-Za-z0-9]+[A-Za-z0-9, .!@#$%^&*()_]*$
(?=.{3,25})
是一个可以确保您的长度要求的先行者。
答案 3 :(得分:0)
我认为你的正则表达式有点奇怪,你在一个集合中包含一个集合。
应该用/^([A-Za-z0-9]+[A-Za-z0-9, .!@#$%^&*()_]*){3,25}$/
括号来定义数字。