首页 > 解决方案 > 带有触发阿拉伯语的特定特殊字符的正则表达式

问题描述

我有一个用于检测特殊字符的正则表达式。

因为我想不出一个只允许任何字母、空格-和“,”。喜欢California - USA Cairo, Egypt London UK

我正在使用的正则表达式:

'/[!@#$%^&*<>();{}[\]_؟:\+=~\/\?\.\\"\']+/'

有许多反斜杠用于转义特殊的正则表达式符号。

但是,它适用于英语 like New York - USA,但它匹配任何阿拉伯语单词,如القاهرة - مصر محمد.

$input = "القاهرة - مصر";

if (preg_match('/[!@#$%^&*<>();{}[\]_؟:\+=~\/\?\.\\"\']+/', $input)) {
    echo 'match';
}

为什么它只包含特定字符而匹配阿拉伯字母?

标签: phpregex

解决方案


您可以使用

preg_match('~^[\p{L}\p{M},\s-]+\z~u', $input)

请参阅正则表达式演示详情

  • ^- 字符串的开始
  • [\p{L}\p{M},\s-]+- 一个或多个字母 ( \p{L})、变音符号 ( \p{M})、逗号、空格 ( \s) 和连字符直到
  • \z- 字符串的最后。

推荐阅读