2017-06-05 77 views
2

我試圖用PHP編寫一個正則表達式(正則表達式)來匹配所有的拉丁字母,包括具體的那些塞爾維亞 - 克羅地亞語,如「ćčđšž」匹配拉丁字母,包括塞爾維亞 - 克羅地亞語字符

這裏我的代碼:

public function alpha_space($str) 
{ 
    return (! preg_match("/^([-a-z0-9_ ])+$/i", $str)) ? FALSE : TRUE; 
} 

我應該如何修改此代碼段,以便正則表達式也適用於塞爾維亞克羅埃西亞語字母?

謝謝你的任何想法,你想提供。

+0

你只想讓一些字母或全部「塞爾維亞您可以通過使用u標誌限制由碼點字-croatian「字母? 「塞爾維亞克羅地亞」西里爾文字符?你可能想看看http://php.net/manual/en/regexp.reference.unicode.php。 – chris85

回答

2

這些都是Unicode的拉丁成員擴展塊,肚裏從0100到0x017F。

$test = "ćčđšž"; 
$start = "100"; 
$finish = "17f"; 
$pattern = "/^[\x{{$start}}-\x{{$finish}}]*$/u"; 
$result = preg_match($pattern, $test); 
var_dump($result); 

所以這延伸到你原來的模式將是這個樣子:

$pattern = "/^[-a-z0-9_ \x{100}-\x{17f}]+$/ui"; 
0

您可以使用正則表達式\p{L}來匹配任何Unicode字母。

這會改變你的正則表達式:^([-\p{L}0-9_ ])+$

public function alpha_space($str) 
{ 
return (! preg_match("/^([-\p{L}0-9_ ])+$/i", $str)) ? FALSE : TRUE; 
} 

Here's a fiddle.

+1

這是一個非常多的字母! – miken32

+0

只有幾十萬。 ;) – Daniel

相關問題