HTML5 模式 - 不允许以下字符

新手上路,请多包涵

我想屏蔽以下字符:

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

我的模式有什么问题?

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

原文由 Oron Bendavid 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 205
1 个回答

我的模式有什么问题?

它包含一个否定字符类,您无法在其中转义 ] 符号。 _在字符类内部_,它*必须在 JS 中进行转义, _在字符类外部_,您 _不必对它进行转义_。因此,您的 "[^()/<>[]\,'|\x22]+" 模式实际上意味着: 只匹配一个! character other than ()/<>[ (with the [^()/<>[] part) followed with a *sequence of ,' , -OR- (as | is an交替运算符(如果未在字符类之外转义)双引号(与 \x22 匹配)后跟一个或多个文字 ] 符号(如 ] 匹配文字 ] 在字符类之外,而 + 是为其设置的量词。

你其实需要

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

 <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 属性 值是锚定的,即整个 pattern 被包装成 ^(?:)$ 。您不必在模式之间放置 ^$

用于此属性的正则表达式语言与 JavaScript 中使用的语言相同,除了 pattern 属性与整个值匹配,而不仅仅是任何子集(有点像它在开头暗示了 ^(?: 模式和 )$ 最后)。

原文由 Wiktor Stribiżew 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题