我正在创建一个注册表单。 我想在密码输入上使用占位符属性,部分地使用pattern属性解释用于验证的正则表达式的类型。
这是我在www.html5pattern.com找到的正则表达式:
(?=^.{6,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$
这个正则表达式的解释如下:
Password (UpperCase, LowerCase, Number/SpecialChar and min 6 Chars)
我在占位符属性中使用的示例以及title属性是:Examp1e
。
我想确保用户没有特别输入“Examp1e”作为他们的密码。
有没有人对我应该如何完成这项任务有任何建议,建议或意见?
答案 0 :(得分:1)
你开始使用的正则表达式很糟糕。首先,JavaScript \W
等同于[^A-Za-z0-9_]
:任何不是ASCII字符的字符。这包括所有ASCII标点符号,空格和控制字符,以及所有非ASCII字符。对于#34;特殊字符"没有官方定义。我知道,但我很确定这不是作者的意思。
为了实现这一点,我假设密码中只允许使用ASCII字符,并且"特殊字符"是指标点字符:
[!"#$%&'()*+,\-./:;<=>?@\[\\\]^_`{|}~]
这会使正则表达式
^(?=[!-~]{6,20}$)(?=.*[A-Z])(?=.*[a-z])(?=.*[\d!"#$%&'()*+,\-./:;<=>?@\[\\\]^_`{|}~]).*$
注意:
请注意我是如何将^
拉出第一组的;它在那里锚定整个正则表达式,而不仅仅是那一个预测。
我还合并了&#34;数字&#34;和&#34;特价&#34;向前看。在这种情况下,这不是什么大问题,但我的一个规则是,如果角色类能够完成这项工作,你绝不应该使用轮换。
[!-~]
是任何&#34;可见&#34;的旧Perl习语。 ASCII字符(即除了空白或控制字符之外的任何东西)。
我没有想到原作者试图用(?![.\n])
做什么。
答案 1 :(得分:0)
当通过html5模式属性验证输入时,这个正则表达式对我很有效,因为我无法从有效地址中生成无效:
(?=^.{6,20}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$