2009-11-05 5 views
0

У меня есть следующие шаблоны в URL.
Соответствует регулярному выражению, которое соответствует следующим шаблонам?

  1. john.smith
  2. John.Smith.1
  3. John.Al-Смит
  4. John.al-smith.1
  5. John.Smith.Al-Caboon

Если первый (.) Является обязательным и с хотя бы одним символом до и после первого (.), Остальная часть материала (числа, дефис и вторая (.)) Являются необязательными.
Я создал следующий Regex:

^\w+.\w+-*\w*.?\d*\w*-*\w* 

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

  1. «войти в систему» ​​(без обязательной первой точки)
  2. «пользователи/john» (с нежелательным/ , а также без обязательной первой точки)
  3. «1234» (Недействительный, па ttern должен начинаться с символа)

Что я здесь делаю неправильно?

+0

Как вы бы описали своего персонажа? Будет ли J1hn.Smith действительным? –

+1

Вам следует избегать точек с обратной косой чертой. Сейчас это подстановочный знак, который объясняет, почему некоторые из нежелательных строк соответствуют шаблону. – Franz

+0

@ Dominic yeh, j1hn.smithy и 1jhn.smith будут действительны. – Galilyou

ответ

2

Проблемы наблюдались с регулярным выражением

  1. "" является метасимволом в регулярном выражении. Он соответствует «чему угодно». Вы должны избегать этого, чтобы соответствовать точке. Пример: \.
  2. \w - класс персонажа, который включает в себя небольшие буквы, колпачки, цифры и символ подчеркивания. Это объясняет, почему «1234» прошло.

Попробуйте эту

^[a-zA-Z]\w*(\.[-\w]+){1,2}$ 
+0

Только одна маленькая nitpick: большинство реализаций регулярных выражений не позволяют DOT соответствовать '\ r' и' \ n', если не включена опция DOT-ALL '(? S)'. –

+0

Спасибо за объяснение, но ваше Regex ничего не соответствовало шаблонам выше! – Galilyou

+0

@ 7alwagy не уверен, что вы имеете в виду? Я пробовал на regexpal.com, и он отлично сочетался. Вам нравится иметь этот список в файле и делать один за другим поиск, чтобы соответствовать им или чему-то еще? то вам, вероятно, следует избавиться от ^, $ – Jaskirat

1

может быть, вы должны избежать точки

\. 
+0

+1 спасибо, что указали это! – Galilyou

0

И \w означает [A-Za-z0-9_]. Именно поэтому он соответствует «1234».

0

Используйте это выражение: \w+\S*?\.\w+\S*

Я прочитал ваше определение, как:

  • по крайней мере один символ
  • обязательная точка
  • по крайней мере, один характер

Это побежал успешно использует .NET RegexOptions.ECMAScript и RegexOptions.Multiline

Смежные вопросы