模式HTML/Javascript中的无效转义

Mau*_*rne 6 html javascript regex validation input

我正在尝试创建一个使用模式的输入字段来检查输入是否是有效的Windows文件路径.我的模式是

/^(?:[\w]\:|\\)(\\[a-zA-Z_\-\s0-9\.()~!@#$%^&=+';,{}\[\]]+)+\.(exe)$/g
Run Code Online (Sandbox Code Playgroud)

但是当把它放入输入字段的pattern属性时:

<input id="path" type="text" pattern="^(?:[\w]\:|\)(\[a-zA-Z_\-\s0-9\.()~!@#$%^&=+';,{}[]]+)+\.(exe)$">
Run Code Online (Sandbox Code Playgroud)

它说(在控制台)

模式属性值^(?:[\ w]:| \)(\ [a-zA-Z _-\s0-9.()〜!@#$%^&= +';,{} []] + )+.(exe)$不是有效的正则表达式:Uncaught SyntaxError:无效的正则表达式:/ ^(?:[\ w]:| \)(\ [a-zA-Z _-\s0-9.() 〜!@#$%^&= +';,{} []] +)+.(exe)$ /:无效的逃脱

我已经尝试了几种不同的写法,但似乎都没有.

Wik*_*żew 8

您只需要转义必须转义的字符类中的字符,否则,您将始终收到此错误.

使用

pattern="(?:\w:|\\)(\\[\w\s.()~!@#$%^&=+';,{}[\]-]+)+\.exe"
Run Code Online (Sandbox Code Playgroud)

JSFiddle

细节:

  • 连字符必须位于字符类的末尾
  • ] 必须转义字符类的内部
  • [.不能逃脱
  • :绝不能esacaped,这是从来没有特殊字符
  • [a-zA-Z0-9_] = \w
  • pattern总是被默认的停靠,你不需要^$锚.