HTML5 模式 - 不允许使用以下字符

Oro*_*vid 6 html regex forms validation

我想屏蔽以下字符:

( 
) 
/ 
> 
< 
] 
[ 
\ 
" 
, 
; 
| 
Run Code Online (Sandbox Code Playgroud)

我的模式有什么问题?

pattern="[^()/<>[]\,'|\x22]+"
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 8

我的模式有什么问题?

它包含一个否定字符类,您未能在其中转义]符号。在字符类内部,它*必须在 JS 中转义,在字符类外部,您不必对其进行转义。因此,您的"[^()/<>[]\,'|\x22]+"模式实际上意味着:匹配一个且仅匹配一个!字符以外的字符()/<>[(带有[^()/<>[]部分)后跟 * 序列,', -OR-|如果没有转义到字符类之外,则为交替运算符)双引号(与 匹配\x22)后跟一个或多个文字]符号(作为]匹配)文字]字符类的外面,+是一个量词设置它。

你实际上需要

pattern="[^()/><\][\\\x22,;|]+"
Run Code Online (Sandbox Code Playgroud)

pattern="[^()/><\][\\\x22,;|]+"
Run Code Online (Sandbox Code Playgroud)

在字符类中,除了 之外],您还需要对\符号进行转义。并且-,如果它站立2字面中符号之间,但是你在这里有没有连字符。

注意:HTML5 模式属性值默认是锚定的,即整个模式被包装成^(?:)$。您不必在模式之间放置^$

用于此属性的正则表达式语言与 JavaScript 中使用的相同,除了模式属性与整个值匹配,而不仅仅是任何子集(好像它隐含^(?:在模式开头的 a)$和结尾)。


Fer*_*big 3

如果您的模式包含 a ],则应该使用 a 对其进行转义\,其他字符也需要转义,例如\在转义另一个值的上下文中未使用时:

<form><input pattern="[^()/<>[\]\\,'|\x22]+"><input type=submit value=test></form>
Run Code Online (Sandbox Code Playgroud)