RegEx для разрешения буквенно-цифровой в начале и дефисе после - PullRequest
9 голосов
/ 20 января 2009

У меня было требование, чтобы в текстовом поле первый символ был буквенно-цифровым и затем я могу разрешить дефис после этого в JavaScript. Также дефис не должен быть разрешен в конце

Ответы [ 4 ]

14 голосов
/ 20 января 2009

Если вы не хотите совпадать с множественными тире после каждого другого:

^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$

Это будет соответствовать: a, a-a, aaa-a, aaa-a-aaa-a-aaa-a и т. Д.
Но не: -, -a, a-, a--a, a-a-a-, a-a--a и т. Д.

8 голосов
/ 20 января 2009
^[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]$
5 голосов
/ 20 января 2009

Я бы предложил:

^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$

Это также соответствует строкам длины 1.

5 голосов
/ 20 января 2009

Вот вариант POSIX + look-akead:

^[[:alnum:]](?:[[:alnum:]-](?!-$))*$

Это также позволяет использовать только один символ в качестве совпадения. Это не так читабельно, хотя. ; -)

Обратите внимание, что [[:alnum:]] - это сокращенный заранее определенный класс символов, эквивалентный [a-zA-Z0-9], более эффективный, но в остальном взаимозаменяемый. Не каждый тип регулярных выражений знает эти классы POSIX, используйте традиционную форму, если хотите.

Вот тот, который не допускает множественных последовательных дефисов, и он короче:

^(?:[[:alnum:]]+(?:-(?!$))?)+$

и это не POSIX форма:

^(?:[a-zA-Z0-9]+(?:-(?!$))?)+$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...