Регулярное выражение: ограничение, где и как часто разрешены определенные символы - PullRequest
0 голосов
/ 08 марта 2012

У меня есть несколько номеров форм, которые мне нужно проверить.Я пробовал несколько попыток, но пока не понимаю.Хотя в форме номера допускается многое, есть некоторые ограничения, которые мне нужно наложить:

Все эти правила должны применяться:

  • AZ разрешено, но не обязательно (см. Пункт 4)
  • 0-9 разрешено, но не обязательно (см. Пункт 4).
  • точка (десятичная точка) и тире, если есть, разрешены только один раз для номера формы.-
  • Минимальная длина - один символ, и он не может быть пробелом, тире или точкой
  • допускается несколько пробелов, но два пробела могут не находиться рядом друг с другом;также не допускаются начальные и конечные пробелы

Это то, что у меня было раньше, но не все вышеперечисленные правила были применены.

[A-Z0-9]([A-Za-z0-9 -.])*[A-Z0-9]

Так что это будут примеры действительных номеров формв соответствии с новыми требованиями:

123 
123 456 
A1 IL 23 MN 
CL-100 2.0 

Это будут примеры неверных номеров форм в соответствии с новыми требованиями:

123   456
25! 25
25-IL 30-1
aa bb CC

Ответы [ 2 ]

0 голосов
/ 08 марта 2012

Это должно работать

^([A-Z0-9]|(?! )(?!.* $)(?!.*  )(?!.*-.*-)(?!.*\..*\.)(?![.-]$)[A-Z0-9 .-]+)$

Есть две части.Первый [A-Z0-9] проверяет наличие одного символа.Если это не один символ, то существуют некоторые правила исключения (?! )(?!.* $)(?!.* )(?!.*-.*-)(?!.*\..*\.)(?![.-]$) (по порядку): без начала с пробела, без конца с пробелом, без последовательных двойных пробелов, без двух -, без двух ., безодиночный символ . или - с последующим концом строки.Затем есть «базовый» паттерн (один или несколько из) [A-Z0-9 .-]+

Обратите внимание, что вам придется убежать \ с другим \, поэтому \\.

0 голосов
/ 08 марта 2012

Почему-то все должно быть в одном регулярном выражении?Вы можете пройти и сопоставить для \s\s, и убедиться, что возвращает false.затем вы можете просмотреть каждого персонажа и убедиться, что не более 1 из них является ., а не более одного из них - -.Вы также можете проверить, нет ли начальных или конечных пробелов, или вы можете быть добры к своим пользователям и просто обрезать ввод.Затем вы можете убедиться, что у вас есть хотя бы один символ, и если длина равна ровно одному символу, это не тире или точка.

Наконец, поскольку все остальные ваши условия теперь выполнены, выможете сопоставить строку с [A-Z0-9 -.]*, и вы получите ответ.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...