|
PHP / MySQL Создание динамических Веб-ресурсов |
18.01.2011, 10:30
|
#1
|
AnyKey`щик
Регистрация: 24.12.2010
Сообщений: 6
Написано одно полезное сообщение
|
Регулярные выражения
Господа, если есть спецы по регуляркам, помогите.
Нужен скрипт который должен проверять строку на соответствие 2-м шаблонам:
name||domain.com
и
domain.com||12345678||status
причем 12345678 - количество цифр может быть любым и status может принимать значения ip, o или c. Предполагается что пробелы из строки заблаговременно удалены. Функция должна проверять на соответствие, возвращать 0 если строка правильная или 1 если нет.
Помогите, плиз, воторой день уже мучаю мозг.
|
(Offline)
|
|
20.01.2011, 14:23
|
#2
|
Нуждающийся
Регистрация: 05.08.2008
Сообщений: 73
Написано 11 полезных сообщений (для 24 пользователей)
|
Ответ: Регулярные выражения
1. name||domain.com
$str = 'name||domain.com'; preg_match('#^name\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#', $str);
2. domain.com||12345678||status
$str = 'domain.com||12345678||status'; preg_match('#^[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+\|\|[0-9]+\|\|(ip|o|c)$#', $str);
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо HAMANN за это полезное сообщение:
|
|
21.01.2011, 03:51
|
#3
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Регулярные выражения
HAMANN, а где про эти выражения почитать можно? (имеется ввиду, на твой взгляд где лучше)?
|
(Offline)
|
|
21.01.2011, 08:47
|
#4
|
Нуждающийся
Регистрация: 05.08.2008
Сообщений: 73
Написано 11 полезных сообщений (для 24 пользователей)
|
Ответ: Регулярные выражения
http://www.phpclub.ru/detail/article/regexp_1
не плохая статья. Не полная. Но довольно понятная
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.01.2011, 09:36
|
#5
|
AnyKey`щик
Регистрация: 24.12.2010
Сообщений: 6
Написано одно полезное сообщение
|
Ответ: Регулярные выражения
HAMANN, благодарю!
А можно еще немного скорректировать это с учетом что name - имя абстрактное и может принимать любые значения?
И еще вопрос с позволения. Как я понимаю, вот этот кусок - {3,} проверяет на количество символов? И если к примеру домен будет something.travel - нужно заменить на {5,}? Будут ли в таком случае приниматься значения меньше 5-ти символов?
Правильно я понимаю что для того чтобы принимать такие значения нужно преписать так:
preg_match('#^[a-z0-9-]\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})(\.[a-z0-9-]{4,})(\.[a-z0-9-]{5,})+$#', $str);
|
(Offline)
|
|
21.01.2011, 10:42
|
#6
|
Нуждающийся
Регистрация: 05.08.2008
Сообщений: 73
Написано 11 полезных сообщений (для 24 пользователей)
|
Ответ: Регулярные выражения
вообще там универсальный Домен. Любой пройдет. запись {3,} значит от 3х символов и больше. (причем это только первое слово в домене) а последующие от 2х символов и больше. Твой домен проходит под это регулярное выражение.
А можно еще немного скорректировать это с учетом что name - имя абстрактное и может принимать любые значения?
|
Ну если совсем любое то:
$str = 'name||domain.com'; preg_match('#^.+\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#', $str);
если только слово:
$str = 'name||domain.com'; preg_match('#^\w+\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#', $str);
причем если в имени будет использоваться например русский язык то нужно модификатор 'u' поставить (UTF- и 'i' если без учета регистра
$str = 'name||domain.com'; preg_match('#^\w+\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#u', $str);
можно только англ. буквы и цифры
$str = 'name||domain.com'; preg_match('#^[a-z0-9]+\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#', $str);
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.01.2011, 11:18
|
#7
|
AnyKey`щик
Регистрация: 24.12.2010
Сообщений: 6
Написано одно полезное сообщение
|
Ответ: Регулярные выражения
Ага. Немного перепутал. Начинает вопрос проясняться.
Если не надоело отвечать, еще один маленький вопросик.
А если я к примеру задам такие две строки:
$str = 'name||domain.com||blablabla';
или
$str = 'name||domain.com.mx';
как тогда отреагирует выражение? Для меня в идеале было бы чтобы в первом случае получился фейл, а во втором проверка была бы пройдена.
|
(Offline)
|
|
21.01.2011, 16:49
|
#8
|
Нуждающийся
Регистрация: 05.08.2008
Сообщений: 73
Написано 11 полезных сообщений (для 24 пользователей)
|
Ответ: Регулярные выражения
может лучше конкретно задачу скажешь? а то так сложно ориентироваться. пройдет только второе
1 Вариант.
if(preg_match('#^\w+\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#', $str)) { //проверка пройдена } else { //аборт }
2 Вариант:
if(!preg_match('#^\w+\|\|[a-z0-9-]{3,}(\.[a-z0-9-]{2,})+$#', $str)) //аборт
//проверка пройдена
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.01.2011, 02:31
|
#9
|
AnyKey`щик
Регистрация: 24.12.2010
Сообщений: 6
Написано одно полезное сообщение
|
Ответ: Регулярные выражения
Да собственно это и была конкретная задача. Спасибо громадное, проверил варианты и все сработало на 5-ку!
Что то никак мне эти регулярки не даются...
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.01.2011, 03:33
|
#10
|
Нуждающийся
Регистрация: 05.08.2008
Сообщений: 73
Написано 11 полезных сообщений (для 24 пользователей)
|
Ответ: Регулярные выражения
Да тоже долго допирал. До сих пор не все знаю.
|
(Offline)
|
|
22.01.2011, 05:18
|
#11
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Регулярные выражения
Сообщение от MoKa
HAMANN, а где про эти выражения почитать можно? (имеется ввиду, на твой взгляд где лучше)?
|
Несколько месяцев назад прочитал про регулярные выражения в википедии и узнал много полезных новых тонкостей для себя, о которых прошлые несколько лет и вовсе не знал.
http://ru.wikipedia.org/wiki/Регулярные_выражения
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:08.
|