带有一个或多个字母的正则表达式后跟可选数字,总长度最小为8?

时间:2016-09-29 08:54:11

标签: regex html5

我在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,},它没有按预期工作。

1 个答案:

答案 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* - 零个或多个(*)个数字
  • $ - 字符串结尾(隐式)

&#13;
&#13;
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;
&#13;
&#13;