Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Vassily Kiryanov                     2:5054/36      31 Mar 2007  13:43:41
 To : Sergey Semin
 Subject : регулярные выражения
 -------------------------------------------------------------------------------- 
 
 
 31 Mar 07 03:24, Sergey Semin wrote to All:
 
 SS> В общем, есть задачка, описываемая регулярным выражением: при входе на
 SS> ресурс проверять ник на валидность. Амбиции таковы: ник должен
 SS> начинаться с буквы и иметь внутри не больше одного из символов _.-
 SS> Другие отличные от букв и цифр символы запрещены.
 
 SS> Пишем такой паттерн: (^[A-Za-zА-Яа-я]+[_.-]?[A-Za-zА-Яа-яЁё0-9]*$)
 
 Вот так можно твой паттерн рассматривать для большей наглядности:
 0) (^
 1) [A-Za-zА-Яа-я]+
 2) [_.-]?
 3) [A-Za-zА-Яа-яЁё0-9]*
 4) $)
 
 причём
 0 - нужен чтобы паттерн применялся от начала строки
 1 -             вначале была минимум одна буква
 2 -             пропустить не больше одного минуса или подчёркивания
 3 -             после всего этого мог быть любой набор букв и цифр
 4 -             после конца паттерна и строка не могла продолжаться
 
 SS> В результате всё работает почти как надо, но вот заморочка выходит с
 SS> никами типа "f1-1" (который, в принципе соответствует правилу).
 
 не соответствует, потому и не пропускается
 
 SS> Пропускает "f1",
 
 "f" пропускается блоком 1 а "1" пропускается блоком 3 (если-бы после цифры стоял
 минус или подчёркивание то блок 3 не мог бы её пропустить, ведь он стоит после
 блока 2, пропускающего минусы)
 
 SS>  пропускает "f-1",
 
 "f" пропускается блоком 1
 "-" пропускается блоком 2
 "1" пропускается блоком 3
 
 SS>  но почему не пропускает "f1-1" ?!
 
 Ты где-то перед блоком, пропускающим минусы и подчёркивания, видишь блок,
 который мог бы пропустить цифру? Или нет? Вот и регексп такого блока не видит,
 соответственно такой набор символов и не пропускает.
 
 SS> Уж мозги кинпят :(
 
 С кем не бывает? Попей кваску холодного, домашнего, или в тупую двумерную
 стрелялку поиграй (времён PC-AT 386) - весьма способсвует расслаблению извилин
 от излишнего перенапряжения, а через то - и решению задачи.
 
 Вообще-то ты уже сам должен был догадаться, чего там не хватает. Hо, если
 остужающих напитков и мозгорасслабительной игрушки под рукой не оказалось, то
 просто между 1 и 2 блоками добавь ещё одну копию блока 3.
 Можно и буквы "Ёё" добавить в блок 1 для пущей красоты.
 
 Всего хорошего.              "За верную и прибыльную дружбу!" (c) Яго.
                 Vassily
 ---
  * Origin: И бьется против геноцида Вася, и против Васи геноцид. (2:5054/36)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 регулярные выражения   Sergey Semin   31 Mar 2007 03:24:59 
 регулярные выражения   Vladimir Kurtukov   31 Mar 2007 09:19:56 
 регулярные выражения   Sergey Semin   31 Mar 2007 10:45:11 
 регулярные выражения   Alex Semenyaka   31 Mar 2007 10:18:18 
 регулярные выражения   Leizer A. Karabin   31 Mar 2007 20:05:52 
 регулярные выражения   Sergey Semin   31 Mar 2007 22:37:55 
 регулярные выражения   Leizer A. Karabin   31 Mar 2007 10:22:31 
 регулярные выражения   Vassily Kiryanov   31 Mar 2007 13:43:41 
 регулярные выражения   Alex Mogilnikov   01 Apr 2007 00:24:48 
Архивное /ru.unix.bsd/1851460e69bb.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional