HTML输入模式不起作用

Jur*_*uri 0 html regex forms html5 input

.*(\d{3}\-\d{3}\-\d{2}\-\d{2}|\d{3}\-\d{2}\-\d{2}\-\d{3}|\d{10}).*这种模式运作良好.但突然间,它最近停止了铬和歌剧的工作.这里发生了什么 ?这里有什么问题,怎么回事?Opera正在通知无效的逃脱,同样在chrome中.当我在js中检查它时,它工作正常.

<form>
<input type="text" pattern=".*(\d{3}\-\d{3}\-\d{2}\-\d{2}|\d{3}\-\d{2}\-\d{2}\-\d{3}|\d{10}).*">
<button>
Send
</button>
</form>
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

关键是Chrome和Firefox已经支持ES6正则表达式规范并默认支持Unicode模式.

Unicode模式对于在模式中可以转义哪些字符有更严格的规则.看到这个参考:

IdentityEscape:在BMP模式中,许多字符可以使用反斜杠作为前缀并被解释为自身(例如:如果\u后面没有四个十六进制数字,则将其解释为u).在Unicode模式中,仅适用于以下字符(可释放\uUnicode代码点转义):^ $ \ . * + ? ( ) [ ] { } |

同一组字符在ES6规范页面中称为SyntaxCharacter.

所以,你只能躲避-在那里它被认为是一个特殊字符,使其文字,你可以逃脱它的字符类中.其他任何地方都不能逃脱.

<form>
  <input type="text" pattern=".*(\d{3}-\d{3}-\d{2}-\d{2}|\d{3}-\d{2}-\d{2}-\d{3}|\d{10}).*">
  <input type=Submit>
 </form>
Run Code Online (Sandbox Code Playgroud)