使用正则表达式匹配阿拉伯语/英语字母数字

时间:2011-09-03 07:28:02

标签: php regex

我想要一个匹配的正则表达式:

  • 阿拉伯字母。
  • 列表项
  • 英文字母数字。
  • 最多3个空格。
  • 4最多下划线。

任何订单。


我尝试了不同的解决方案但无法解决。

以下是我现在的情况:

preg_match('@^([^\W_]*\s){0,3}[^\W_]*$@', $username)

上述表达式允许:

  • 最多3个空格
  • 英语alpanumerics
  • 不允许下划线

2 个答案:

答案 0 :(得分:3)

您可以检查您的正则表达式是否支持此\p{Arabic}\p{InArabic}

还尝试使用mb_ereg_match()函数:http://si2.php.net/manual/en/function.mb-ereg-match.php

如果这不起作用,除了将所有阿拉伯字符显式写入表达式之外别无选择。凌乱,但是做了工作。

由于您使用的是php,您可以先将所有阿拉伯字符列入字符串变量,然后将该变量添加到regex中,以实现代码可管理性。

答案 1 :(得分:0)

我不知道阿拉伯字符,但以下正则表达式应与其他字符匹配

([a-zA-Z0-9]{1,})\s{0,3}_{0,4}

这将匹配 (字母数字)(0-3空格)(0-4下划线)

如果有超过4个下划线,则最后一个将被省略 如果有超过3个空格,则忽略3个空格后的部分。

编辑: 对于阿拉伯字母:首先声明一个包含所有阿拉伯字母的字符串 所以你会有

$arabic='all_arabic_letters';

然后你的正则表达式字符串将是

$regex='[' . $arabic . ']{1,}([a-zA-Z0-9]{1,})\s{0,3}_{0,4}';

并按如下方式匹配:

preg_match($regex, $username);