仅匹配阿拉伯语和英语字母数字,仅允许一个空格

时间:2017-06-05 00:46:42

标签: php regex validation arabic

我有一个论坛网站,我目前正在处理最后一块,注册表单,我想验证用户名。它应该只包含阿拉伯语和英语字母数字,并且单词之间最多只能有一个空格。

我有英文字母数字部分工作,但不是阿拉伯语,也不是双重空格。

我使用preg_match()函数将用户名输入与RegEX匹配。

我现在有什么:

!preg_match('/\p{Arabic}/', $username) && !preg_match('/^[A-Za-z0-9]$/')
//this is currently inside and if statement, so if they both don't match then it is false.

1 个答案:

答案 0 :(得分:2)

您应该将unicode属性放在常规正则表达式中,因为这可以通过1个正则表达式完成。您还需要量化该字符类,否则您只允许1个字符。这个正则表达式应该这样做。

^[\p{Arabic}a-zA-Z\p{N}]+\h?[\p{N}\p{Arabic}a-zA-Z]*$

在PHP中使用u修饰符,以便unicode按预期工作。

PHP用法:

preg_match('/^[\p{Arabic}a-zA-Z\p{N}]+\h?[\p{N}\p{Arabic}a-zA-Z]*$/u', $string);

演示:https://regex101.com/r/fsRchS/2/