2015-12-21 47 views
1

这不是其中的一个“帮我构建我的正则表达式”的问题。我有一个HTML表单输入字段,用户可以以各种格式提供地理位置数据。以下正则表达式在regexr.com以及我的应用程序中正常工作。但是,我想在提交之前使用HTML5的“模式”参数来额外验证用户的输入。 。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的和addslashes()函数转义字符太多
  • 我通过单个反斜线逃脱报价

这并没有改变任何东西。我使用Chrome进行测试,使用简单的正则表达式可以正常工作。上面的那个显然太复杂了。

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

回答

3

使用HTML实体:

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

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

+0

谢谢,这就是解决方案...即使我经常使用htmlentities()来显示数据,它并没有发生在我身上,我可以用它来编码我的正则表达式模式......非常感谢! – user3205494