正则表达式:((?=.*\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>
答案 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个字符,贪婪,直到字符串)
- 非捕获组的结束$
- 字符串结束。