来自任何语言的信件的正则表达式不适用于php

时间:2019-04-25 03:31:45

标签: php regex

我正在使用以下正则表达式表达式来允许来自任何语言,数字,下划线和空格的字母。

^[\p{L}0-9 _]\*[\p{L}0-9][\p{L}0-9 _]\*$

它可以在在线正则表达式测试器工具中很好地工作,但在我的PHP代码中却不能。例如,它不会与任何俄语单词“Привет”匹配。

知道为什么吗?

PHP版本:PHP 7.1.16

2 个答案:

答案 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

Demo on 3v4l.org

答案 1 :(得分:1)

This RegEx可能会帮助您轻松做到这一点:

^[\pL_\w\d\s]+$

enter image description here

您可以进一步简化它,但它仍然可以正常工作,例如:

[\pL_\d\s]+

,您可以删除单词的 \ w ,并以 ^ 开头和以 $ 字符结尾。

根据您的RegEx,我认为this RegEx可能会起作用:

([\pL\d\s_]+)\*([\pL\d]+[\pL\d\s_]+)\*

enter image description here

它使用()创建两个组。