кодировка — в переполнении стека разрешены только английские буквы и цифры

Я пытаюсь создать фильтр, позволяющий пользователям использовать только английские буквы (строчные & прописные буквы) и цифры. Как мне это сделать? (ANSI)
(не пытается очистить, только чтобы узнать, содержит ли строка неанглийские буквы)
Этот фильтр должен получить чистую базу данных только с английскими именами пользователей, без многобайтовых символов и символов UTF-8.

И кто-нибудь может объяснить мне, почему эхо strlen (А) выводит ‘2’? это означает, что два байта правильно? Разве символы UTF-8 не должны содержать один байт?

Спасибо

1

Решение

Таким образом вы проверяете, содержит ли строка только буквы английского алфавита.

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

Другой вопрос:

strlen(À)

не вернется 2. Может быть, вы имели в виду

strlen('À')

strlen возвращается

Длина строки в случае успеха и 0, если строка пуста.

взято из Вот. Таким образом, этот символ интерпретируется как два символа, вероятно, из-за вашей кодировки.

2

Другие решения

Вы должны использовать регулярные выражения, чтобы увидеть, соответствует ли строка шаблону. Это довольно просто:

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('À'));
3

По вопросам рекламы [email protected]