javascript - 你能帮我使用 php preg_replace 重写我的 javascript 正则表达式吗?

标签 javascript php regex validation

我创建了一个 JavaScript 正则表达式来验证用户在我的应用程序中输入的评论。正则表达式允许使用字母、数字、一些特殊符号和一系列表情符号

我收到了帮助here正确格式化我的 javascript 正则表达式,我使用的最终表达式如下:

Javascript 正则表达式:

commentRegex =    /^(?:[A-Za-z0-9\u00C0-\u017F\u20AC\u2122\u2150\u00A9 \/.,\-_$!\'&*()="?#+%:;\<\[\]\r\r\n]|(?:\ud83c[\udf00-\udfff])|(?:\ud83d[\udc00-\ude4f\ude80-\udeff]))*$/;

有人建议我在服务器端(使用 php)执行相同的验证,因此我尝试使用 preg_replace() 执行类似的过程。

所以我想用空字符串替换所有字符(不包含在正则表达式中)。这是我的尝试,但它不起作用。感谢您的帮助

PHP

$commentText = preg_replace('#^(?:[A-Za-z0-9\u00C0-\u017F\u20AC\u2122\u2150\u00A9 \/.,\-_$!\'&*()="?#+%:;\<\[\]\r\r\n]|(?:\ud83c[\udf00-\udfff])|(?:\ud83d[\udc00-\ude4f\ude80-\udeff]))*$#', '', $commentText);

编辑:

在采纳了您在评论中的建议后,我现在有了以下正则表达式。

$postText = preg_replace('/^(?:[A-Za-z0-9\x{00C0}-\x{017F}\x{20AC}\x{2122}\x{2150}\x{00A9} \/.,\-_$!\'&*()="?\#\+%:;\<\[\]\r\n]|(?:\x{d83c}[\x{df00}-\x{dfff}])|(?:\x{d83d}[\x{dc00}-\x{de4f}\x{de80}-\x{deff}]))*$/', '', $postText);

但是我收到警告

<b>Warning</b>:  preg_replace(): Compilation failed: character value in \x{} or \o{} is too large at offset 30 in <b>submit_post.php</b> on line <b>37

最佳答案

简而言之:使用

$re = '/[^A-Za-z0-9\x{00C0}-\x{017F}\x{20AC}\x{2122}\x{2150}\x{00A9} \/.,\-_$!\'&*()="?#+%:;<[\]\r\n\x{1F300}-\x{1F3FF}\x{1F400}-\x{1F64F}\x{1F680}-\x{1F6FF}]+/u';
$text = 'test>><<<®¥§';
echo preg_replace($re, '', $text);

请参阅PHP demo .

一点解释:

  • 仅转义模式内的特殊正则表达式元字符正则表达式分隔符(如果您选择 # 作为正则表达式分隔符,请转义 #在模式中,然后不需要转义 /)
  • PCRE 中的
  • \uXXXX 必须替换为 \x{XXXX} 表示法
  • 由于要处理的文本是 Unicode,并且模式中的字符超出了 ASCII 范围,因此必须使用 /u UNICODE 修饰符
  • 由于大多数表情符号都位于 BMP 平面之外,并且字符串现在被视为 Unicode 代码点链,因此这些符号必须使用扩展的 \x 表示法编写,而不是使用两字节表示法在 JavaScript 中
  • 您的 3 个替代方案可以合并为 1 个大字符类,然后您想通过在其开头添加 ^ 使其成为否定字符类来否定它。

关于javascript - 你能帮我使用 php preg_replace 重写我的 javascript 正则表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41666698/

相关文章:

javascript - 通过 addDomListener 方法中的初始化函数传递变量

javascript - JavaScript 正则表达式中的多个嵌套匹配

regex - 自动构建适合字符串集的正则表达式

javascript - 无法使用 Tab 键选择 Kendo Multiselect 的数据

javascript - 将输入类型日期与当前日期进行比较

javascript - 5 星评级系统的 CSS

PHP SQL 分页

php - Html Select Box 从mysql获取值

php 查询不返回结果

python - 将两个正则表达式连接在一起