Я пытаюсь создать regex для ввода html5, который должен содержать только допустимое имя папки.
Чтобы поддерживать большое количество файловых систем, я думал только о том, чтобы:
Теперь мое регулярное выражение выглядит так:
[a-zA-Z0-9][a-zA-Z0-9 ]{0,254}[a-zA-Z0-9]?
Вопросительный знак в конце является проблемой, потому что это позволит пробелам в конце, если не указан конечный символ.
Но если я оставлю это, мне нужно добавить не менее двух символов. Аналогичная проблема возникает, если я добавлю ?
к первому шаблону.
Теперь я застрял. Я могу сделать это без ограничения характера 255, но с ним все разваливается.
/i
, но действительно очень элегантно!
\b
++ заслуживает принятия ответа
Вам нужно добавить ^ при запуске и $ at end, тогда ваше регулярное выражение должно будет соответствовать всей проверенной строке. В противном случае он может совпадать с 255 символами из 100000, и он все равно пройдет.
pattern
HTML5, используемого OP. Нет необходимости явно использовать ^
и $
в шаблоне, они добавляются автоматически при передаче строкового шаблона в конструктор RegExp.
Вы можете использовать
^[a-zA-Z0-9]$|^[a-zA-Z0-9][a-zA-Z0-9 ]{0,253}[a-zA-Z0-9]$
Первая альтернатива обрабатывает случай с одним символом, а вторая - с корпусом 2-255 символов.
^[a-zA-Z0-9]$|^[a-zA-Z0-9][a-zA-Z0-9 ]{0,253}[a-zA-Z0-9]$
вот так, или? :)
Вы можете использовать это регулярное выражение с отрицательным видом:
^[a-zA-Z0-9](?!.* $)[a-zA-Z0-9 ]{0,254}$
RegEx Подробности:
^
: Начать[a-zA-Z0-9]
: [a-zA-Z0-9]
альфа-числовой символ при запуске(?!.* $)
: Отрицательный просмотр для подтверждения отказа, когда последний символ является пространством[a-zA-Z0-9 ]{0,254}
: соответствие 0 - 254
буквенно-числовых или пробельных символов$
: Конец
()
и сделать это необязательным с?
Тогда первая группа всегда требуется, а последняя требуется только в сочетании с серединой.