2017-06-12 78 views
2

我正在尝试在HTML中对密码插入表单执行客户端检查,我需要密码才能包含至少一个字母字符和一个数字。我尝试以下内容:HTML模式验证始终为false

<input type="password" name="reg-password" pattern="(?=.*\d)(?=.*[a-zA-Z])" title="The password must contain at least a number and an alphabetic character" required> 

但由于某种原因,我不理解验证总是失败,我无法提交表单。你能解释我的代码错在哪里吗?我还用一些在线正则表达式调试器测试了正则表达式,它应该没问题。提前致谢。

此外,有什么特别的原因,我应该避免这种客户端验证方法,并使用Javascript代码呢?我觉得这种方式要快得多(如果它只是工作)

回答

2

由于HTML5 input pattern需要一个完整的字符串匹配,使用以下命令:

pattern="(?=.*\d)(?=.*[a-zA-Z]).+" 

它会得到翻译成/^(?:(?=.*\d)(?=.*[a-zA-Z]).+)$/正则表达式,并会正确处理输入。

如果您使用的是HTML5覆盖模式的特性处理,明确添加锚点一些额外的框架:

pattern="^(?=.*\d)(?=.*[a-zA-Z]).+$" 

,它会在所有的上下文环境中运行。

JS演示:

<form> 
 
<input type="password" name="reg-password" pattern="^(?=.*\d)(?=.*[a-zA-Z]).+" title="The password must contain at least a number and an alphabetic character" required> 
 
<input type="submit"> 
 
</form>

+0

谢谢你,它的工作!所以如果我对HTML5的理解能够很好地理解,那么以前的正则表达式根本就没有字符,这就是验证总是失败的原因,对吧?再次感谢! – RVKS

+1

是的,它期望一个空字符串,但也需要一个数字和一个字母,所以,你的正则表达式是'^(?:(?=。* \ d)(?=。* [a-zA-Z]))$ ' - 一个永远不会匹配任何字符串的正则表达式。 –