2017-05-03 38 views
1

正则表达式:((?=.*\d)(?=.*[A-Z]))HTML模式简化版,即使有正确的正则表达式工作

输入字符串:qwer1Q

输入字符串以上通过验证,如果你在regex101

检查然而,如果您将html正则表达式包含在html pattern属性中,并尝试再次验证相同的字符串,但不得通过:

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

回答

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) - 积极先行检查,以确保至少有1位
    • (?=.*[A-Z]) - 积极先行检查,以确保至少有1个大写字母
    • .* - 任何0+字符,贪婪,达串
  • )的端部 - 串的端部 - 的非捕获组
  • $结束。