我正在使用以下正则表达式表达式来允许来自任何语言,数字,下划线和空格的字母。
^[\p{L}0-9 _]\*[\p{L}0-9][\p{L}0-9 _]\*$
它可以在在线正则表达式测试器工具中很好地工作,但在我的PHP代码中却不能。例如,它不会与任何俄语单词“Привет”匹配。
知道为什么吗?
PHP版本:PHP 7.1.16
答案 0 :(得分:3)
您的正则表达式有几个问题。首先,它将仅匹配3个字符,而其中一个字符集后面没有添加*
或+
。其次,要在PHP中匹配unicode,您需要在正则表达式上使用u
modifier。尝试以下方法:
$str = 'Привет';
$regex = '/^[\p{L}0-9 _][\p{L}0-9]+[\p{L}0-9 _]$/u';
echo preg_match($regex, $str);
输出:
1
答案 1 :(得分:1)
This RegEx可能会帮助您轻松做到这一点:
^[\pL_\w\d\s]+$
您可以进一步简化它,但它仍然可以正常工作,例如:
[\pL_\d\s]+
,您可以删除单词的 \ w ,并以 ^ 开头和以 $ 字符结尾。
根据您的RegEx,我认为this RegEx可能会起作用:
([\pL\d\s_]+)\*([\pL\d]+[\pL\d\s_]+)\*
它使用()
创建两个组。