2010-07-14 11 views
2

我正在使用正則表達式來查看字符串中是否存在單個非拉丁字符。如何使用正則表達式找到一個非拉丁字符的單個事件?

$latin_check = '/[\x{0030}-\x{007f}]/u'; //This is looking for only latin characters 


if(preg_match($latin_check, $_POST['full_name'])) { 
    $error = true;   
} 

這應該檢查是否至少存在一個不是拉丁字符的字符。如果它沒有找到至少一個非拉丁字符,那麼它應該將$ error設置爲true。

我想我的邏輯可能是錯誤的。如何在php中使用正則表達式查找單個非拉丁字符的發生?

+0

一眼看來,這對我來說很好。看起來preg_match是什麼意思。有關它不起作用? – 2010-07-14 04:02:40

+0

請參閱http://stackoverflow.com/questions/3411566/how-can-i-detect-non-western-characters/3411589#3411589 – Artefacto 2010-08-09 22:56:19

回答

3

您的正則表達式(據我所知)將匹配十六進制代碼\ x0030和\ x007f之間的任何字符,這與您想要的相反。如果你正在尋找發現不在該範圍內的字符(即 - 非拉丁字符),我想你會想用一個否定的字符類:

$latin_check = '/[^\x{0030}-\x{007f}]/u'; 

的「^」元字符在正則表達式字符類基本上是指「不在該字符類內的任何字符」。

2

下面應該工作:

if (preg_match('/[^\x30-\x7F]/', $_POST['full_name']) > 0) 
{ 
    $error = true; 
} 

你可能想,如果你想接受的空間和下面的ASCII符號使用的x20代替x30爲您的下邊界:!"#$%&'()*+,-./

相關問題