2014-02-27 41 views
0

什麼是一個很好的班輪PHP的正則表達式檢查與重音符號 /姓字段(如果有人的名字是皮埃爾),即可以匹配類似:重音字符驗證

<?php 
$strErrorMessage = null; 

if(!preg_match('/\p{L}0-9\s-+/u', trim($_POST["firstname"]))) 
    $strErrorMessage = "Your first name can only contain valid characters, ". 
    "spaces, minus signs, or numbers."; 
?> 

這嘗試使用unicode驗證,從this post,但不能正常工作。該解決方案似乎很難谷歌。

+2

咦?你想排除撇號爲什麼?另外,我從來沒有聽說過含有「減號」的名字,儘管我知道很多包含連字符的名字。 – TRiG

+0

@TRiG:我敢肯定,「減號」和連字符(打字時)是完全一樣的。 – Magictallguy

+0

這是一個遠射,但也嘗試'\ p {M}' – ex3v

回答

0

除了驗證名稱的困難之外,還需要將字符放入character class/\p{L}0-9\s-+/u僅匹配「Ä0-9------」之類的序列。什麼你想要做的是

/^[\p{L}0-9\s-]+$/u 

另外我補充anchors,他們確保了正則表達式試圖完整的字符串相匹配。

正如ex3v提到的,你應該增加\p{M}到那個類來匹配組合字符。 See Unicode properties.

/^[\p{L}\p{M}0-9\s-]+$/u 
+0

...我曾希望你會添加php代碼在這也是。 –

+0

@FlorianMertens,哪個代碼? if(!preg_match('/^[\ p {L} \ p {M} 0-9 \ s - ] + $/u',trim($ _ POST [「firstname」])) $ strErrorMessage =「你的名字只能包含有效的字符,「。 「空格,減號或數字。」;'??? – stema