2013-07-05 64 views
0

我正在嘗試構建一個正則表達式,與PHP兼容,允許重音字符,例如'ü'。 從我所瞭解的\ p {L}運營商應該這樣做。我至今:PHP正則表達式與重音字符不匹配

/^[a-z0-9\p{L}][a-z0-9_\p{L}]*/i 

這應該允許可以與任何AZ,0-9啓動和重音字符,然後可以接着AZ,0-9的任何量和重音字符和字符串的整個表達式不區分大小寫。

但是在測試中,當在字符串的任何位置使用諸如'ü'等字符時,驗證失敗。 我已經確定被傳遞的值進行編碼UTF8使用:

utf8_encode($value) 

但是它仍然失敗。 有什麼建議嗎?

在此先感謝

-------------------------編輯------------- ------------

在另一臺服務器上測試之後,原始模式也起作用。

/^[a-z0-9\p{L}][a-z0-9_\p{L}]*/i 

該問題似乎與服務器設置有關。 我會在找到解決方案後發佈解決方案。

+0

嘗試啓用UTF修改'/.../ ui' –

+0

不幸的是,utf修飾符沒有成功。 – dooffas

回答

1

我認爲這可能爲你工作:

$pattern = '/^[0-9a-zá-úàü][0-9_a-zá-úàü]*$/i'; 

我跑到下面的代碼來測試模式:

$str = "patinação"; 
$pattern = '/^[0-9a-zá-úàü][0-9_a-zá-úàü]*$/i'; 
if (preg_match($pattern, $str, $matches)){ 
    echo $matches[0];//output: patinação 
} 
+0

與以前相同的結果,它不會註冊任何重音字符。 – dooffas

+1

@dooffas - 我剛測試過它,編輯了我的答案以顯示測試和結果。如果它不適合你,我不知道爲什麼,因爲它在這裏工作正常。 –

+1

我同意,即使用戶自己給出的第一個代碼在我的機器上也能正常工作。看起來你的web服務器上沒有啓用pcre unicode。 –