【问题标题】:HTML5 Validate Text input using pattern containing quoteHTML5 使用包含引号的模式验证文本输入
【发布时间】:2016-03-28 00:45:09
【问题描述】:

这不是“帮助我构建我的正则表达式”问题之一。我有一个 HTML 表单输入字段,用户可以在其中提供各种格式的地理位置数据。以下正则表达式在 regexr.com 以及我的应用程序中运行良好。但是,我想使用 HTML5 的“模式”参数在提交之前额外验证用户的输入。

((([E|W|N|S](\s)?)?([\-]?[0-1]?[(0-9)]{1,2})[°][ ]?([(0-5)]?[(0-9)]{1})([\.|,][0-9]{1,5})?['][ ]?([0-5]{0,1}[0-9]?(([\.|\,])[0-9]{0,3})?)([\"]|[']{2}){0,1}((\s)?[E|W|N|S])?)|([-]?[1]?[0-9]{1,2}[\.|,][0-9]{1,9}))

关键是这个正则表达式包含一个引号字符(“)。现在,我把这个正则表达式放在我的输入中,如下所示:

<input type="text" pattern = "regex..."...." />

浏览器无法识别此正则表达式,并且根本不进行任何验证,因此显然我需要转义该引用。到目前为止我尝试了什么:

  • PHP 的 addlashes() 函数转义了太多字符。
  • 我用一个反斜杠转义了引号

这并没有改变任何东西。我用 Chrome 进行了测试,它适用于简单的正则表达式。上面那个显然有点太复杂了。

我知道上面的正则表达式对于匹配坐标并不完美,但是,这里不讨论这个问题。我只是想知道如何正确转义 HTML5 中的模式,因为 Chrome 对该正则表达式没有任何作用。

【问题讨论】:

    标签: regex html


    【解决方案1】:

    使用 HTML 实体:

    • 而不是' 使用&amp;apos;
    • 而不是" 使用&amp;quot;

    如果您使用 PHP 创建正则表达式,则可以使用htmlentities() 使用 HTML 实体对字符串进行编码。默认情况下,这只会对双引号进行编码,但您可以使用 ENT_QUOTES 选项对两种类型的引号进行编码。

    【讨论】:

    • 谢谢,这就是解决方案...尽管我经常使用 htmlentities() 来显示数据,但我没有想到我可以使用它来编码我的正则表达式模式...谢谢很多!
    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多