Проверьте, содержит ли переменная текст или числа - PullRequest
0 голосов
/ 15 сентября 2011

Я создаю функцию поиска. Пользователям разрешено использовать только a-z A-Z и 0-9. Как проверить, содержит ли $ var только текст или цифры, а не специальные символы?

Я пробовал что-то вроде этого:

if (!preg_match('/[^a-z]/i', $search) {
$error = "error...";
}

Если у кого-нибудь есть более разумное решение, пожалуйста, дайте мне знать. Это также может быть что-то, проверяющее специальные символы.

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Примерно так:

if(!preg_match('/^[a-zA-Z0-9]+$/', $search)) {
    // error
}
2 голосов
/ 15 сентября 2011

Ты в значительной степени там.Просто добавьте числа 0-9 к своему регулярному выражению, например:

if(preg_match('/[^a-z0-9]/i', $search)) 
{
    $error = "Error...";
}

Флаг /i указывает выражению игнорировать регистр, поэтому A-Z не требуется в списке букв.

В исходном коде вы искали все, что не было буквой или цифрой, и одновременно проверяли, не preg_match() не соответствует что-либо - высоздал двойной негатив.Приведенный выше код выполняет if(), если найдено, что не буква или цифра найдено.Полный комментарий @brain в комментариях.


Чтобы разрешить другие символы, просто добавьте их к символам внутри фигурных скобок:

if(preg_match('/[^a-z0-9 \.]/i', $search)) 
{
    $error = "Error...";
}

В этом примере разрешены пробелы и .(точки).

...