【问题标题】:Html5 pattern that check for at least 2 digits and at least 4 letters in any order以任意顺序检查至少 2 个数字和至少 4 个字母的 Html5 模式
【发布时间】:2016-09-07 20:27:48
【问题描述】:

我使用 Html5 模式来验证密码,我需要确保字符串包含至少 2 个数字和至少 4 个任意顺序的字母。

我做到了,这就是我目前得到的:[a-z]{4,}[0-9]{2,}|[0-9]{2,},但我需要它以任何顺序排列,例如:9pog8k

如果我有任意顺序的 2 个数字和 4 个字母,那么无论我有什么其他的都可以。

谢谢!

【问题讨论】:

  • 请建议应该是什么模式> 请为我创建我的模式。你先尝试自己创造一些东西怎么样?
  • 我做到了,这就是我目前得到的结果:[a-z]{4,}[0-9]{2,}|[0-9]{2,} 但我需要它可以任意顺序,例如:9pog8k
  • 但这是否意味着密码只能包含字母和数字?或者任何字符?
  • 如果我有 2 个数字和 4 个字母以任何顺序排列,那么无论我有什么其他的都很好。谢谢。

标签: regex html validation


【解决方案1】:

[a-z]{4,}[0-9]{2,}|[0-9]{2,} 匹配 4 个或更多字母 + 2 个或更多数字,或 2 个或更多数字,从开始将结束,因为 pattern 正则表达式默认锚定。

您需要使用 lookaheads 来实际检查是否有任何模式以任何顺序出现在字符串中,而不是简单的交替:

input:valid {
  color: green;
}
input:invalid {
  color: red;
}
<form name="form1"> 
 <input pattern="(?=(?:[^a-zA-Z]*[a-zA-Z]){4})(?=(?:\D*\d){2}).*" title="Min. 2 digits and min. 4 letters are required"/>
 <input type="Submit"/> 
</form>

HTML5 模式属性需要全字符串匹配,所以末尾的.* 是必须的。

模式详情

  • (?=(?:[^a-zA-Z]*[a-zA-Z]){4}) - 必须有 4 个 0+ 非字母后跟一个字母的序列
  • (?=(?:\D*\d){2}) - 必须有 2 个 0+ 非数字后跟一个数字的序列
  • .* - 匹配任何字符,0+ 次出现

【讨论】:

  • 就是这样。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 2013-03-01
  • 2020-12-06
  • 2023-03-24
  • 1970-01-01
  • 2011-07-28
  • 2013-05-29
相关资源
最近更新 更多