我在HTML5验证中使用模式。 我想要一个正则表达式来检查这样的用户名格式:
<letters+><digits*> : total length minimum 8
-> starting with letters then optional digits.
示例:w1234567,qweqr123,jsgwiuegn1274124,qwerasdf,awdjwuadhuf等。
错误的例子:12345678,qwe12qwe,12qweqwe,qweq12等。
我试过了([A-z]+[0-9]*){8,}
,它没有按预期工作。
答案 0 :(得分:0)
你的正则表达式 - ([A-z]+[0-9]*){8,}
- 匹配[A-z]
范围内的8个或更多1个或字符序列(不仅仅是字母,请参阅Why is this regex allowing a caret?)和0+个数字。因此,它并没有真正设定长度限制。
您可以使用基于前瞻性的正则表达式:
pattern="(?=[a-zA-Z\d]{8})[A-Za-z]+\d*"
请注意,pattern
默认是锚定的,并将作为^(?:(?=[a-zA-Z\d]{8})[A-Za-z]+\d*)$
传递给正则表达式引擎。为了安全起见,您可以明确添加它们:pattern="^(?=[a-zA-Z\d]{8})[A-Za-z]+\d*$"
请参阅regex demo
详细:
^
- 匹配字符串的开头(隐式)(?=[a-zA-Z\d]{8})
- 从字符串开头需要8个字母数字字符的正向前瞻[A-Za-z]+
- 1个或多个(+
)ASCII字母\d*
- 零个或多个(*
)个数字$
- 字符串结尾(隐式)
input:valid {
color: navy;
}
input:invalid {
color: red;
}
&#13;
<form name="form1">
<input pattern="(?=[a-zA-Z\d]{8})[A-Za-z]+\d*" title=""/>
<input type="Submit"/>
</form>
&#13;