2011-11-22 109 views
6

如何添加/即興我的代碼西班牙口音會除了正常的字母被認爲是有效的(AZ)PHP正則表達式驗證字母和西班牙口音

我已經在我的代碼如下

public static function IsAlpha($s){ 
    $reg = "#[^a-z\s-]#i"; 
    $count = preg_match($reg, $s, $matches); 
    return $count == 0; 
} 
+3

潛在重複的問題有答案:[PHP的:PREG:如何匹配像一個墳墓特殊字符?](http://stackoverflow.com/questions/2133758/php-preg-how-to-match-special- chars-like-a-grave) – Wiseguy

+0

這是一個類似的問題,但是,我仍然無法弄清楚如何將它與我現有的正則表達式集成。 – xar

+1

@Wiseguy:你應該發表這個評論作爲答案。 – Toto

回答

20

正如答案發現this question,你可以使用全Unicode property\p{L}匹配重音字符。這包括重音的人一起定期a-z字符,所以在你的表達與此像這樣替換a-z

$reg = "#[^\p{L}\s-]#u"; 

注意,使用這個你需要在你結束分隔符後UTF-8 modifier u,因爲文檔說這樣的Unicode「字符類型可用於UTF-8模式被選中「。

+0

+1,但沒有我需要的標誌。 – Toto

+0

@ M42良好的捕獲。不區分大小寫的標誌現在是不必要的,除非正則表達式稍後被擴展並且模式的其他部分需要它。 – Wiseguy

+1

在我的情況下,我不得不添加u修飾符(UTF8)才能正常工作。 – user276648

1

我認爲你可以使用每個字母的hexadecimal representation

<?php 
function IsAlpha($sString) 
{ 

    $reg = "#[a-zA-Z\xE1\xE9\xED\xF3\xFA\xC1\xC9\xCD\xD3\xDA\xF1\xD1]+#i"; 
    $count = preg_match_all($reg, $sString, $matches, PREG_OFFSET_CAPTURE); 
    return $matches; 
} 
echo '<pre>'; 
print_r(IsAlpha("abcdefgh ñ á é í ño 123 asd asáéío nmas asllsdasd óúfl ÑABDJÓ ÚñÍÉ")); 
echo '</pre>'; 

我不知道是否有所有的字母,但你可以用這個link添加更多。

相關問題