HTML5使用包含引号的模式验证文本输入

时间:2015-12-21 20:59:00

标签: regex html5

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

((([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的addslashes()函数转义了太多字符。
  • 我用一个反斜杠逃脱了引用

这没有改变任何事情。我测试了Chrome,它可以使用简单的正则表达式。上面的那个显然有点太复杂了。

我知道上面的正则表达式不适合匹配坐标,但是,这里不讨论。我只是想知道如何正确地逃避HTML5中的模式,因为Chrome不会对该正则表达式执行任何操作。

1 个答案:

答案 0 :(得分:3)

使用HTML实体:

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

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