У меня есть требование, когда мне нужно проверить поле в Excel.
[a-zA-Z0-9]
но не с любыми специальными [-_]
A--Badasd
(не разрешено) A__Bsdasdas
(Не разрешено) A-_fdsfdsd
(не разрешено) A_-sfsdfsdf
(не разрешено) AB-adf
(разрешено) A_b_adads
(разрешено) Я придумал это следующее регулярное выражение, однако он, похоже, не принимает даже непрерывные записи "-" и "_".
^[a-zA-z0-9]+(([\xFF01-\xFF5E]+|[\\-\\_])+)[a-zA-Z0-9]+$
[\xFF01-\xFF5E]
должен не допускать символов двойной ширины, поэтому, пожалуйста, игнорируйте его, поскольку он работает нормально.
Любая помощь будет очень заметной.
Я могу предложить только шаблон, основанный на просмотре (поскольку [\xFF01-\xFF5E]
соответствует _
и ограничение его в JS regex сделает шаблон более громоздким):
/^[a-z0-9](?:(?!.*?[-_]{2})[\xFF01-\xFF5E-]*[a-z0-9])?$/i
См. Демо-версию regex.
Этот шаблон будет соответствовать строки длиной 1 полукокса, тоже, и будет соответствовать только те строки, начинающиеся и заканчивающиеся с ASCII буквенно - цифровой полукокса и не имеющих --
, _-
, -_
и __
в них.
Если вы хотите "блокировать" строки длиной 1, то есть установить минимальную длину совпадения на 2, вы должны удалить (?:
И )?
из приведенного выше рисунка:
/^[a-z0-9](?!.*?[-_]{2})[\xFF01-\xFF5E-]*[a-z0-9]$/i
подробности
^
- начало строки[a-z0-9]
- буквенно-цифровой символ ASCII(?:(?!.*?[-_]{2})[\xFF01-\xFF5E_-]*[a-z0-9])?
- необязательная (1 или 0 вхождения) последовательность: (?!.*?[-_]{2})
- контрольная проверка, которая не даст совпадения, если есть 2 последовательных -
или _
любом месте после любых символов 0+, кроме символов разрыва строки[\xFF01-\xFF5E-]*
- любой символ в диапазоне \xFF01-\xFF5E
или/и -
[a-z0-9]
- буквенно-цифровой символ ASCII$
- конец строки.(?:
И последний )?
и он также будет «блокировать» строки из 1 символа. Я добавил вариант шаблона для строк длиной 2 и до ответа.
^(?!.*[-_]{2})[a-zA-Z0-9][\xFF01-\xFF5E_-]*[a-zA-Z0-9]$
. Или разрешить 1 строку символов,^(?!.*[-_]{2})[a-zA-Z0-9](?:[\xFF01-\xFF5E_-]*[a-zA-Z0-9])?$