RegEx至少1个数字,1个小写字母和1个大写字母

时间:2017-03-30 20:34:05

标签: regex

目前,我正在使用我发现的长度限制:

<input #password="ngModel" type="password" name="password"  minlength="5" maxlength="30" pattern="((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20})" required ngModel>

它有效,但我不想在最后限制长度。我不太了解正则表达式,所以我假设最后删除{6,20}会完成工作,但我错了。

所以我的问题是:如何在没有长度限制的情况下使这个正则表达式工作?谢谢!

1 个答案:

答案 0 :(得分:6)

您正在使用默认情况下锚定正则表达式的HTML5 pattern attribute(它实际上使用^(?:)$包装模式。这意味着模式必须匹配整个字符串。这就是为什么你不能取出.{6,20}并保持前瞻的原因。

您需要在开头使用前瞻,并在结尾使用.*(允许输入中包含0个或更多个字符)或.+(禁止空输入)(作为消费模式)部分):

pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*"

这将成功翻译为/^(?:(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*)$/并按预期方式运作:

  • ^ - 字符串开头
  • (?: - 非捕获组的开始
    • (?=.*\d) - 需要当前位置的任何0+字符后的1位数
    • (?=.*[a-z]) - 需要当前位置的任何0+字符后的1个小写字母
    • (?=.*[A-Z]) - 需要当前位置的任何0+字符后的1个大写字母
  • .* - 任意0个或更多字符
  • ) - 非捕获组的结束
  • $ - 字符串结束。