我正在尋找歐洲名稱的正則表達式。 我發現這一個,做工不錯的javascript:歐洲名稱正則表達式
/^([ \u00c0-\u01ffa-zA-Z'\-])+$/
我把它轉換爲PHP,但它不工作:
:/^([ \x{00C0}-\x{01FF}a-zA-Z'\-])+$/
我正則表達式必須用的名字一樣,匹配
讓 - 保羅·樂馬爾尚
傑羅姆L'活躍
所以字符-ZA-Z,沒有特殊字符如@#$%^©等,但所有重音/歐洲字符,如éèàôç等
我正在尋找歐洲名稱的正則表達式。 我發現這一個,做工不錯的javascript:歐洲名稱正則表達式
/^([ \u00c0-\u01ffa-zA-Z'\-])+$/
我把它轉換爲PHP,但它不工作:
:/^([ \x{00C0}-\x{01FF}a-zA-Z'\-])+$/
我正則表達式必須用的名字一樣,匹配
讓 - 保羅·樂馬爾尚
傑羅姆L'活躍
所以字符-ZA-Z,沒有特殊字符如@#$%^©等,但所有重音/歐洲字符,如éèàôç等
您需要激活Unicode模式爲這些轉義序列工作:
/^([ \x{00C0}-\x{01FF}a-zA-Z'\-])+$/u
注意,括號是沒有必要的:
/^[ \x{00C0}-\x{01FF}a-zA-Z'\-]+$/u
字符類讓你的正則表達式的一個「元素」,可以是repeate與量詞立即直接tely。
確保您使用UTF8編碼,然後拍打着的正則表達式的u
修改:
$regex = '/^([ \x{00C0}-\x{01FF}a-zA-Z\'\-])+$/u';
這個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:內方括號你不需要逃避連字符-
如果是在第一或最後的地方。
@ m.buettner:謝謝,這是正確的,我糾正了我的筆記。 – anubhava
我想你還需要'''即使它是一個「特殊字符」? – djechlin
你爲什麼要這樣做?也許你可以阻止某人進入'J0hn',但他們仍然可以輸入'oooooooooooooooooooooooooooooo'這樣的名字。你永遠不會用正則表達式檢查來阻止惡意輸入。既然你已經明顯支持unicode,不要擔心任何人進入。也許有人*被稱爲'John Doe the 3rd'或也許明年。爲什麼阻止它? (對不起,如果我冒犯了任何中國人。) – GolezTrol