2016-08-14 116 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