2015-10-02 443 views
0

我正在嘗試創建一個篩選器,允許用戶只能使用英文字母(小寫字母&大寫)和數字。我怎樣才能做到這一點? (ANSI) (並非試圖清理,只是爲了判斷一個字符串是否包含非英文字母) 該過濾器應該爲我提供一個乾淨的數據庫,只有英文用戶名,沒有多字節和UTF-8字符。只允許在英文字母和數字在php

任何人都可以向我解釋爲什麼echo strlen(À)輸出'2'?它意味着兩個字節對嗎? wans't UTF-8字符應該包含單個字節?

感謝

+0

http://php.net/manual/en/function.strlen.php - 看看文檔。 *長度測量的字符串。* – Qirel

+0

UTF-8是一種Unicode轉換格式。爲了表示所有字符,它有一個,兩個,三個......字節序列。你不妨寫IsUTF8LeadByte()。 – lit

回答

1

這是你如何檢查一個字符串是否包含英文字母只能是字母。

if (!preg_match('/[^A-Za-z0-9]/', $string)) { 
    //string contains only letters from the English alphabet 
} 

另一個問題:

strlen(À) 

將不會返回2.也許你的意思

strlen('À') 

strlen回報

成功的字符串的長度,和如果字符串爲空,則爲0。

here拍攝。所以,該字符被解釋爲兩個字符,可能是由於您的編碼。

+0

謝謝你,幫了我很多。 –

+0

我很樂意提供幫助。 –

2

您應該使用正則表達式來看看一個字符串模式相匹配。這是一個非常簡單的:

if (preg_match('/^[a-zA-Z0-9]+$/', $username)) { 
    echo 'Username is valid'; 
} else { 
    echo 'Username is NOT valid'; 
} 

而之所以strlen('À')等於是因爲strlen不知道該字符串是UTF-8。嘗試使用:

echo strlen(utf8_decode('À')); 
+0

這個正則表達式是否與特殊字符匹配? – sandeepsure

+0

不,它不匹配重音字符,只有26個字母小寫和大寫。他們需要手動添加到該表達式中:/^[a-zA-Zéèàê0-9] + $ /例如。 –

+0

謝謝!正是我需要的。 –

相關問題