我想阻止以下字符:
(
)
/
>
<
]
[
\
"
,
;
|
我的模式出了什么问题?
pattern="[^()/<>[]\,'|\x22]+"
答案 0 :(得分:3)
你的模式包含一个]
,你应该使用\
来转义它,其他字符也需要被转义,就像\
在转义另一个值的上下文中没有使用时一样:
<form><input pattern="[^()/<>[\]\\,'|\x22]+"><input type=submit value=test></form>
&#13;
答案 1 :(得分:3)
我的模式有什么问题?
它包含一个否定的字符类,您无法转义]
符号。 在角色类中,它*必须在JS中转义,在角色类之外,你不必逃避它。因此,您的"[^()/<>[]\,'|\x22]+"
模式实际上意味着:匹配一个且只有一个!字符而不是()/<>[
(带有[^()/<>[]
部分)后跟一个*序列{ {1}}, -OR - (因为,'
是一个替换运算符,如果没有在字符类之外转义)双引号(与|
匹配)后跟一个或更多文字\x22
符号(因为]
与字符类之外的文字]
匹配,]
是设置为它的量词。
你真的需要
+
pattern="[^()/><\][\\\x22,;|]+"
&#13;
除了<form action="#" method="post">
<input name="name1" pattern="[^()/><\][\\\x22,;|]+" placeholder="New value" title="No special characters!">
<input class="submit" value="Submit!" type="submit" name="name2">
</form>
之外,在角色类中,您需要转义]
符号。如果它位于两个文字符号之间,则为\
,但此处没有连字符。
注意:默认情况下会锚定HTML5 pattern attribute值,即整个模式被转换为-
和^(?:
。您不必在模式之间添加)$
和^
。
用于此属性的正则表达式语言与JavaScript中使用的正则表达式语言相同,只是模式属性与整个值匹配,而不仅仅是任何子集(有点像它暗示
$
在模式的开始和结尾的^(?:
。
答案 2 :(得分:-1)
您可以使用以下代码:
emailPattern = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;