#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'])