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

Php 仅匹配阿拉伯文和英文字母数字,仅允许一个空格,php,regex,validation,arabic,Php,Regex,Validation,Arabic,我有一个论坛网站,我目前正在做最后一件事,登记表,我想验证用户名。它应该只包含阿拉伯语和英语字母数字,单词之间最多有一个空格 我用的是英文字母数字部分,但阿拉伯语和双空格都不行 我正在使用preg_match()函数将用户名输入与正则表达式匹配 我目前拥有的: !preg_match('/\p{Arabic}/', $username) && !preg_match('/^[A-Za-z0-9]$/') //this is currently inside and if stat

我有一个论坛网站,我目前正在做最后一件事,登记表,我想验证用户名。它应该只包含阿拉伯语和英语字母数字,单词之间最多有一个空格

我用的是英文字母数字部分,但阿拉伯语和双空格都不行

我正在使用
preg_match()
函数将用户名输入与正则表达式匹配

我目前拥有的:

!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.

您应该将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);

演示:

@chris85我已经修复了第二部分。愚蠢的我:D,但我不明白你说的“在你的角色类内”是什么意思。@chris85这对英语来说很顺利,但对阿拉伯语来说不行,它仍然不接受。这是我现在拥有的<代码>如果(!preg_match('/^[A-Za-z0-9\p{InArabic}]+$/',$username)){中没有
。让我们来看看。