Функции регулярных выражений PHP

#php #regex #validation

#php #регулярное выражение #проверка

Вопрос:

Я пытаюсь проверить входные данные формы с помощью функции preg_match PHP. Я немного смущен тем, как это использовать. Если я хочу проверить, скажем, буквенно-цифровую строку, я бы использовал ^[0-9a-zA-Z ] $ в качестве первого параметра и строку, которую мы проверяем, в качестве второго. Но как мне использовать preg_match, чтобы определить, действительно ли оно или нет? Стал бы я это делать:

 if(preg_match("^[0-9a-zA-Z ] $", $_POST['display_name'])){
  "String is valid";
} else {
  "String is not valid";
}
  

Или наоборот? В настоящее время я использую оператор if not preg_match if, но по какой-то причине он возвращает false … Я знаю, что это, вероятно, простой ответ, но я не могу этого понять.

Комментарии:

1. Почему бы вам просто не использовать ctype_alnum() ?

2. @Johnsyweb, ctype_alnum() не содержит пробелов.

3. @Radu: Я не был уверен, был ли пробел опечаткой. OP заявил, что они хотели «проверить, скажем, буквенно-цифровую строку».

4. Я думаю, что сначала вам нужно выбрать лучшие ответы на эти 12 других вопросов без лучших ответов.

5. it's returning false for some reason... Вы бы получили полезное предупреждение, если бы не отказались error_reporting()

Ответ №1:

ЛОЖНЫЙ возврат из preg_match указывает на ошибку

вам нужно разграничить ваше регулярное выражение (см. Начало и конец / вы также можете использовать другие символы

 if (preg_match("/^[0-9a-zA-Z ] $/", $_POST['display_name'])) {
  

Комментарии:

1. побег? вы имеете в виду добавить разделитель

2. Просто некоторые придирки: регулярное выражение не может возвращаться false , только такая функция, preg_match которая использует регулярное выражение, может. Это также не обязательно указывает на ошибку, если preg_match возвращает false , это означает, что совпадения не было. preg_match выдает ошибку , если регулярное выражение недопустимо, но, по-видимому, OP отключил сообщение об ошибках. 🙂

3. @deceze я отредактировал возвращает false из регулярного выражения, чтобы возвращать false из preg_match. согласно руководству, в нем говорится, что возвращает false при ошибке, возвращает 0 при отсутствии совпадения. хотя я не запускал тесты для проверки правильности руководства.

4. О, вот так. У меня вылетело из головы, что preg_match обычно возвращает 0 или 1 . Так что игнорируйте этот момент моего выбора. 🙂

5. Не совсем верно… Да, в документации PHP для preg_match() говорится, что он возвращает FALSE при ошибке. К сожалению, в версиях PHP 5.3.3 и ниже есть ошибка ( # 52732 ), когда preg_match() НЕ возвращается FALSE при ошибке (вместо int(0) этого возвращается то же значение, что и в случае несоответствия). Эта ошибка была исправлена в версии PHP 5.3.4.

Ответ №2:

Вам нужно добавить разделители вашего шаблона, например:

 preg_match("/^[0-9a-zA-Z ] $/", $_POST['display_name'])