|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/1851460e69bb.html, оценка из 5, голосов 10
|