即使正确的正则表达式,HTML模式也不起作用

时间:2017-05-03 15:37:09

标签: regex html5

正则表达式:((?=.*\d)(?=.*[A-Z]))

输入字符串:qwer1Q

如果您在regex101

中进行检查,则上面的输入字符串会通过验证

但是,如果在html pattern属性中包含正则表达式并尝试再次验证相同的字符串,则不能通过:

<form>
  <div>
    <input type="text" placeholder="Password" 
      pattern="((?=.*\d)(?=.*[A-Z]))">
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>

1 个答案:

答案 0 :(得分:1)

您需要确保模式与整个字符串匹配,因为HTML5 pattern正则表达式默认是锚定的。

<form>
  <div>
    <input type="text" placeholder="Password" 
      pattern="(?=.*\d)(?=.*[A-Z]).*">
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>

(?=.*\d)(?=.*[A-Z]).*模式将变为^(?:(?=.*\d)(?=.*[A-Z]).*)$,它将匹配:

  • ^ - 字符串开头
  • (?: - 非捕获组的开始:
    • (?=.*\d) - 一个积极的先行检查以确保至少有一位数字
    • (?=.*[A-Z]) - 一个积极的前瞻检查,以确保至少有一个大写字母
    • .* - 任意0个字符,贪婪,直到字符串
    • 结束
  • ) - 非捕获组的结束
  • $ - 字符串结束。