我正在嘗試創建一個篩選器,允許用戶只能使用英文字母(小寫字母&大寫)和數字。我怎樣才能做到這一點? (ANSI) (並非試圖清理,只是爲了判斷一個字符串是否包含非英文字母) 該過濾器應該爲我提供一個乾淨的數據庫,只有英文用戶名,沒有多字節和UTF-8字符。只允許在英文字母和數字在php
任何人都可以向我解釋爲什麼echo strlen(À)輸出'2'?它意味着兩個字節對嗎? wans't UTF-8字符應該包含單個字節?
感謝
我正在嘗試創建一個篩選器,允許用戶只能使用英文字母(小寫字母&大寫)和數字。我怎樣才能做到這一點? (ANSI) (並非試圖清理,只是爲了判斷一個字符串是否包含非英文字母) 該過濾器應該爲我提供一個乾淨的數據庫,只有英文用戶名,沒有多字節和UTF-8字符。只允許在英文字母和數字在php
任何人都可以向我解釋爲什麼echo strlen(À)輸出'2'?它意味着兩個字節對嗎? wans't UTF-8字符應該包含單個字節?
感謝
這是你如何檢查一個字符串是否包含英文字母只能是字母。
if (!preg_match('/[^A-Za-z0-9]/', $string)) {
//string contains only letters from the English alphabet
}
另一個問題:
strlen(À)
將不會返回2.也許你的意思
strlen('À')
strlen
回報
成功的字符串的長度,和如果字符串爲空,則爲0。
從here拍攝。所以,該字符被解釋爲兩個字符,可能是由於您的編碼。
謝謝你,幫了我很多。 –
我很樂意提供幫助。 –
您應該使用正則表達式來看看一個字符串模式相匹配。這是一個非常簡單的:
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('À'));
這個正則表達式是否與特殊字符匹配? – sandeepsure
不,它不匹配重音字符,只有26個字母小寫和大寫。他們需要手動添加到該表達式中:/^[a-zA-Zéèàê0-9] + $ /例如。 –
謝謝!正是我需要的。 –
http://php.net/manual/en/function.strlen.php - 看看文檔。 *長度測量的字符串。* – Qirel
UTF-8是一種Unicode轉換格式。爲了表示所有字符,它有一個,兩個,三個......字節序列。你不妨寫IsUTF8LeadByte()。 – lit