Я пытаюсь создать фильтр, позволяющий пользователям использовать только английские буквы (строчные & прописные буквы) и цифры. Как мне это сделать? (ANSI)
(не пытается очистить, только чтобы узнать, содержит ли строка неанглийские буквы)
Этот фильтр должен получить чистую базу данных только с английскими именами пользователей, без многобайтовых символов и символов UTF-8.
И кто-нибудь может объяснить мне, почему эхо strlen (А) выводит ‘2’? это означает, что два байта правильно? Разве символы UTF-8 не должны содержать один байт?
Спасибо
Таким образом вы проверяете, содержит ли строка только буквы английского алфавита.
if (!preg_match('/[^A-Za-z0-9]/', $string)) {
//string contains only letters from the English alphabet
}
Другой вопрос:
strlen(À)
не вернется 2. Может быть, вы имели в виду
strlen('À')
strlen
возвращается
Длина строки в случае успеха и 0, если строка пуста.
взято из Вот. Таким образом, этот символ интерпретируется как два символа, вероятно, из-за вашей кодировки.
Вы должны использовать регулярные выражения, чтобы увидеть, соответствует ли строка шаблону. Это довольно просто:
if (preg_match('/^[a-zA-Z0-9]+$/', $username)) {
echo 'Username is valid';
} else {
echo 'Username is NOT valid';
}
И причина почему strlen('À')
равняется 2 это потому что strlen
не знает, что строка UTF-8. Попробуйте использовать:
echo strlen(utf8_decode('À'));