2014-12-10 4 views
-2
предшествовать

Я хотел кодировать шаблон регулярного выражения, которые необходимо проверить следующее:RegEx тире

Every dash (-) character must be immediately preceded and followed by a letter or number; consecutive dashes are not permitted. 

Может кто-то пожалуйста, помогите мне точку в правильном направлении, о том, как это сделать?

Заранее спасибо.

+0

Приведите несколько примеров для действительных и недействительных совпадений. –

ответ

0
^(?!(?:.*-(?=$|-))|-).*$ 

Try this.See demo.

https://regex101.com/r/aZ6zX0/4

Это использует negative lookahead, чтобы убедиться, что - не следует - или $ и не начинается с -.

+1

Этот успешно проверяет '@ - #', что явно недействительный ввод. –

+0

@AlexSkalozub это легко исправить. Вы можете заменить '. *' Тем, что хотите. Но OP ничего не указал – vks

0

Вы можете использовать следующее простое регулярное выражение, которое использует отрицательное утверждение lookahead.

^(?!-|.*-$|.*-[\W_]|.*[\W_]-).*$ 

DEMO

.*-[\W_]|.*[\W_]- часть в отрицательном опережения утверждения гарантирует, что - не предшествует ни следует символ, не слово или символ _.

0

Мы знаем, что каждая тире должна быть окружена буквами или цифрами, но мы не имеем понятия, если вся строка ограничена буквами, цифрами и тире. Также не было указано, требуется ли строка, чтобы содержать тире вообще.

Предполагая @#$abc-def#% является действительной строкой, мы должны идти с чем-то вроде:

@"^[^-]+?(?:(?<=[\da-z])-(?=[\da-z])[^-]+?)*$" 

DEMO

Если только буквы, цифры и дефис допускаются, это еще проще:

@"^[\da-z]+(?:-[\da-z]+)*$" 

DEMO

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