2012-11-27 102 views
2

我正在尋找歐洲名稱的正則表達式。 我發現這一個,做工不錯的javascript:歐洲名稱正則表達式

/^([ \u00c0-\u01ffa-zA-Z'\-])+$/ 

我把它轉換爲PHP,但它不工作:

/^([ \x{00C0}-\x{01FF}a-zA-Z'\-])+$/ 

我正則表達式必須用的名字一樣,匹配

讓 - 保羅·樂馬爾尚

傑羅姆L'活躍

所以字符-ZA-Z,沒有特殊字符如@#$%^©等,但所有重音/歐洲字符,如éèàôç等

+0

我想你還需要'''即使它是一個「特殊字符」? – djechlin

+0

你爲什麼要這樣做?也許你可以阻止某人進入'J0hn',但他們仍然可以輸入'oooooooooooooooooooooooooooooo'這樣的名字。你永遠不會用正則表達式檢查來阻止惡意輸入。既然你已經明顯支持unicode,不要擔心任何人進入。也許有人*被稱爲'John Doe the 3rd'或也許明年。爲什麼阻止它? (對不起,如果我冒犯了任何中國人。) – GolezTrol

回答

4

您需要激活Unicode模式爲這些轉義序列工作:

/^([ \x{00C0}-\x{01FF}a-zA-Z'\-])+$/u 

注意,括號是沒有必要的:

/^[ \x{00C0}-\x{01FF}a-zA-Z'\-]+$/u 

字符類讓你的正則表達式的一個「元素」,可以是repeate與量詞立即直接tely。

0

確保您使用UTF8編碼,然後拍打着的正則表達式的u修改:

$regex = '/^([ \x{00C0}-\x{01FF}a-zA-Z\'\-])+$/u'; 
0

這個PHP的正則表達式應該工作:

$str = "Jérôme L'activé"; 
if (preg_match("/^[\s\x{00C0}-\x{01FF}a-z'-]+$/iu", $str, $match)) 
    print_r($match); 

OUTPUT:

Array 
(
    [0] => Jérôme L'activé 
) 

RegEx旗

  • ü - 匹配啓用統一
  • 我 - 忽略大小寫比較

PS:內方括號你不需要逃避連字符-如果是在第一或最後的地方。

+0

@ m.buettner:謝謝,這是正確的,我糾正了我的筆記。 – anubhava