2016-08-14 108 views
-2

IM匹配的信件,试图对几个小时找到PHP正确的正则表达式匹配任何语言的字母,但要防止它允许空间正则表达式所有语言PHP

我有尝试这个

[^\p{L}] 

这是确定的,但它看起来像它允许空间

那我也试试这个

[^\w_-] 

它仍然看起来它允许空间

任何人都可以帮忙吗?

+0

喜@ mireille28和感谢要求你的问题在计算器上。我只是想为您提供一些有用的未来技巧。你应该永远记住提供你所尝试的输入和你得到的结果,你不希望在你的问题中得到答案,以便让人们知道你出错的地方。请回顾[如何提问](http://stackoverflow.com/help/how-to-ask)部分以获得更好的答案。 – Sherif

+0

谢谢谢里夫im仍然有点混淆与此网站将尽力改善我的问题,在未来的感谢。 – Mireille28

回答

2

您需要指定Unicode修饰符u才能获得Unicode character properties in PCRE

例如...

$pattern = "/([\p{L}]+)/u"; 
$string = "你好,世界!Привет мир! !مرحبا بالعالم"; 
if (preg_match_all($pattern, $string, $match)) { 
    var_dump($match); 
} 

给了我们......

array(2) { 
    [0]=> 
    array(6) { 
    [0]=> 
    string(6) "你好" 
    [1]=> 
    string(6) "世界" 
    [2]=> 
    string(12) "Привет" 
    [3]=> 
    string(6) "мир" 
    [4]=> 
    string(10) "مرحبا" 
    [5]=> 
    string(14) "بالعالم" 
    } 
    [1]=> 
    array(6) { 
    [0]=> 
    string(6) "你好" 
    [1]=> 
    string(6) "世界" 
    [2]=> 
    string(12) "Привет" 
    [3]=> 
    string(6) "мир" 
    [4]=> 
    string(10) "مرحبا" 
    [5]=> 
    string(14) "بالعالم" 
    } 
} 
+0

嗨,是的,你的工作,但这仍然允许我不想让这是我卡住的地方 – Mireille28

+0

我不明白你的意思是“*允许空间*”。正如您可以清楚地看到的那样,在上面的示例中所示的捕获模式中没有空格。 – Sherif

+0

作为例子,我希望我的用户能够使用所有语言注册,但是当我使用/([\ p {L}] +)/ u时,如果用户在用户名中指定了空格,它仍然会通过验证我希望在最终允许所有字符,但防止用户把空间放在 – Mireille28