似乎是 HTML5 spec (and therefore ECMA262)允许 <input type="text" pattern="[0-9]/[0-9]" />
匹配字符串 '0/0' 即使正斜杠没有被转义。像 Drupal 这样的 Web 应用程序希望为不支持 HTML5 的浏览器提供服务器端验证,例如:
<?php
preg_match('/^(' . $pattern . ')$/', $value);
?>
不幸的是,字符串“[0-9]/[0-9]”不是有效的 PRCE 正则表达式。似乎大多数(如果不是全部)支持 HTML5 的浏览器同时支持 pattern="[0-9]/[0-9]"
和 pattern="[0-9]\/[0-9]"
这就引出了一个问题——我们可以使用什么作为分隔符来针对 Perl 样式的正则表达式运行此模式?
我们已经提交了 bug report against the W3C spec但是这里的浏览器错了吗?是否需要澄清 HTML5 规范?有没有我们可以在 PHP 中使用的解决方法?
最佳答案
如果您使用 #
而不是 /
作为分隔符,它就是一个有效的正则表达式。示例:
preg_match('#^('.$pattern.')$#', $value);
关于php - 什么是用于 HTML5 模式输入元素属性的安全 PCRE 正则表达式定界符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526814/