Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.190.156.80] |
|
Сообщ.
#1
,
|
|
|
Добрый день,
подскажите пожалуйста как проверить строку на соответствие заданному шаблону? Есть шаблон вида: "AB1234" (сначала две буквы латинского алфавита, затем четыре цифры), нужно проверить, соответствует ли строка этому шаблону или нет. Что-то не могу разобраться с рег. выражением как это сделать. $str = "AB1234"; preg_match("/(^[a-z]{2}\d{4})+/", $str); |
Сообщ.
#2
,
|
|
|
Цитата iPhonesoft @ Надо либо i (ignore case) - модификатор ставить, либо перечислять [a-zA-Z] Что-то не могу разобраться с рег. выражением как это сделать. |
Сообщ.
#3
,
|
|
|
У тебя в регулярке учитывается регистр - нижний, а в проверочном слове только верхний
|
Сообщ.
#4
,
|
|
|
ой, уже успели ответить, опоздал
|
Сообщ.
#5
,
|
|
|
Цитата Zafod Biblebox @ У тебя в регулярке учитывается регистр - нижний, а в проверочном слове только верхний Да вот так тоже не работает к сожалению $str = "AB1234"; preg_match("/(^[a-z]{2}\d{4})+/", strtolower($str)); |
Сообщ.
#6
,
|
|
|
Цитата iPhonesoft @ А у тебя там точно латиница? Да вот так тоже не работает к сожалению Добавлено И все таки правильнее будет так: preg_match("/([a-z]{2}\d{4})+/i", $str); Добавлено Кстати, а зачем там было ^ ? Добавлено И зачем у нас выбор подгруппы? Строка должна целиком подходить под условия или в ней должны содержаться подстроки данного вида? |
Сообщ.
#7
,
|
|
|
Цитата fatalist @ Добавлено И все таки правильнее будет так: preg_match("/([a-z]{2}\d{4})+/i", $str); почему-то Ваш пример у меня не сработал. Ниже проверочный код: <?php $str = "ab1234"; // Проверяем, соответствует ли строка маске вида: AB1234 if(!preg_match("/([a-z]{2}\d{4})+/i", strtolower($str))) { // Если сторока не соответствует маске: echo "MASK ERROR"; } // Если соответствует: else { echo "OK"; } ?> |
Сообщ.
#8
,
|
|
|
preg_match("/[a-z]{2}\d{4}/i")
Добавлено Проверил в онлайн конструкторе - предыдущий вариант тоже работает... щас проверю у себя на серваке... Добавлено На моем серваке твой код из поста #9 тоже работает, так что "не морочьте мне голову" Добавлено Единственное, strtolower я таки убрал... хотя слабо себе представляю, чем он мог помешать... |
Сообщ.
#9
,
|
|
|
Цитата fatalist @ На моем серваке твой код из поста #9 тоже работает, так что "не морочьте мне голову" Вот это новости! Спасибо Вам за проверку кода. Видимо у меня причина неполадки связана с версией PHP? Очень странно. |
Сообщ.
#10
,
|
|
|
Цитата iPhonesoft @ Вряд ли... код чуть более, чем полностью универсален... хотя кто его знает... У меня если что 5.3... Вот это новости! Спасибо Вам за проверку кода. Видимо у меня причина неполадки связана с версией PHP? Очень странно. |
Сообщ.
#11
,
|
|
|
У меня PHP Version 5.4.4
|
Сообщ.
#12
,
|
|
|
Цитата iPhonesoft @ И что, в ней pcre переделали что-ли? У меня PHP Version 5.4.4 |
Сообщ.
#13
,
|
|
|
5.5.8 x64 нормально пашет. Может модификатор u добавить?
|
Сообщ.
#14
,
|
|
|
ну попробуй /\w{2}\d{4}/i
|
Сообщ.
#15
,
|
|
|
Нет, не знаю почему, но не хочет у меня работать. Спасибо всем большое за помощь. Буду искать ошибку у себя.
|
Сообщ.
#16
,
|
|
|
Понял в чем моя ошибка. Тестировал на ошибку строку вида $str = "ab12345"; В этом случае рег. выражение срабатывает как истина, т.е. после двух букв идет четыре цифры. Я то изначально задумывал, что проверка как раз этот вариант тоже будет учитывать как неправильный.
|
Сообщ.
#17
,
|
|
|
/^\w{2}\d{4}$/i
|
Сообщ.
#18
,
|
|
|
Цитата fatalist @ Спасибо Вам огромное за помощь! Теперь все работает как нужно. |
Сообщ.
#19
,
|
|
|
Цитата iPhonesoft @ А я ведь почти сразу переспросил:Спасибо Вам огромное за помощь! Теперь все работает как нужно. Цитата fatalist @ Можно было бы сразу этот регвыр сделать... Строка должна целиком подходить под условия или в ней должны содержаться подстроки данного вида? |
Сообщ.
#20
,
|
|
|
Цитата fatalist @ /^\w{2}\d{4}$/i Да, не обратил я внимания сразу на Ваш вопрос, извините. Ваш вариант "/^\w{2}\d{4}$/i " немного не точен, т.к. если подсунуть ему комбинацию вида:"123456", то он выдает её за истину. Я немного исправил, получилось вот так: "/^[a-z]{2}\d{4}$/i". |
Сообщ.
#21
,
|
|
|
Цитата iPhonesoft @ А, ну да, извиняй... просто когда пошла речь о версиях PHP я грешным делом предположил, что поддержка [a-z] может быть вырезана... Ваш вариант "/^\w{2}\d{4}$/i " немного не точен, т.к. если подсунуть ему комбинацию вида:"123456", то он выдает её за истину. |
Сообщ.
#22
,
|
|
|
Цитата fatalist @ поддержка [a-z] может быть вырезана... фига предположение |