HTML5模式 - 不允许以下字符

时间:2016-01-28 15:18:25

标签: regex html5 forms validation

我想阻止以下字符:

( 
) 
/ 
> 
< 
] 
[ 
\ 
" 
, 
; 
| 

我的模式出了什么问题?

pattern="[^()/<>[]\,'|\x22]+"

3 个答案:

答案 0 :(得分:3)

你的模式包含一个],你应该使用\来转义它,其他字符也需要被转义,就像\在转义另一个值的上下文中没有使用时一样:

&#13;
&#13;
<form><input pattern="[^()/<>[\]\\,'|\x22]+"><input type=submit value=test></form>
&#13;
&#13;
&#13;

答案 1 :(得分:3)

  

我的模式有什么问题?

它包含一个否定的字符类,您无法转义]符号。 在角色类中,它*必须在JS中转义,在角色类之外,你不必逃避它。因此,您的"[^()/<>[]\,'|\x22]+"模式实际上意味着:匹配一个且只有一个!字符而不是()/<>[(带有[^()/<>[]部分)后跟一个*序列{ {1}}, -OR - (因为,'是一个替换运算符,如果没有在字符类之外转义)双引号(与|匹配)后跟一个或更多文字\x22符号(因为]与字符类之外的文字]匹配,]是设置为它的量词。

你真的需要

+

&#13;
&#13;
pattern="[^()/><\][\\\x22,;|]+"
&#13;
&#13;
&#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,}))$/;