Regex - максимум 255 символов, без пробела в начале и в конце,

1

Я пытаюсь создать regex для ввода html5, который должен содержать только допустимое имя папки.

Чтобы поддерживать большое количество файловых систем, я думал только о том, чтобы:

  1. Минимальная длина - 1 символ между aZ и 0-9
  2. Во время средних пробелов допускается, но не в начале или в конце
  3. Разрешить максимум 255 символов

Теперь мое регулярное выражение выглядит так:

[a-zA-Z0-9][a-zA-Z0-9 ]{0,254}[a-zA-Z0-9]?

Вопросительный знак в конце является проблемой, потому что это позволит пробелам в конце, если не указан конечный символ.

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

Теперь я застрял. Я могу сделать это без ограничения характера 255, но с ним все разваливается.

  • 3
    Почему бы не объединить среднюю и конечную группы в () и сделать это необязательным с ? Тогда первая группа всегда требуется, а последняя требуется только в сочетании с серединой.
  • 0
    Ага, так близко, но так далеко :) - также должно быть {0, 253}, чтобы никогда не превышать 255 символов, верно? (Или моя математика тоже сломана?)
Показать ещё 1 комментарий
Теги:

4 ответа

5
Лучший ответ
/^\b[A-Z\d ]{1,255}\b$/i

Проверка ввода HTML5: pattern="\b[A-Za-z\d ]{1,255}\b"

  • 0
    не знаю, для чего /i , но действительно очень элегантно!
  • 0
    Превосходное использование \b ++ заслуживает принятия ответа
Показать ещё 2 комментария
3

Вам нужно добавить ^ при запуске и $ at end, тогда ваше регулярное выражение должно будет соответствовать всей проверенной строке. В противном случае он может совпадать с 255 символами из 100000, и он все равно пройдет.

  • 0
    Этот ответ неверен в контексте атрибута pattern HTML5, используемого OP. Нет необходимости явно использовать ^ и $ в шаблоне, они добавляются автоматически при передаче строкового шаблона в конструктор RegExp.
1

Вы можете использовать

^[a-zA-Z0-9]$|^[a-zA-Z0-9][a-zA-Z0-9 ]{0,253}[a-zA-Z0-9]$

Первая альтернатива обрабатывает случай с одним символом, а вторая - с корпусом 2-255 символов.

  • 1
    ^[a-zA-Z0-9]$|^[a-zA-Z0-9][a-zA-Z0-9 ]{0,253}[a-zA-Z0-9]$ вот так, или? :)
  • 0
    спасибо я адаптировал ответ
Показать ещё 1 комментарий
0

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

^[a-zA-Z0-9](?!.* $)[a-zA-Z0-9 ]{0,254}$

Демо-версия RegEx

RegEx Подробности:

  • ^: Начать
  • [a-zA-Z0-9]: [a-zA-Z0-9] альфа-числовой символ при запуске
  • (?!.* $): Отрицательный просмотр для подтверждения отказа, когда последний символ является пространством
  • [a-zA-Z0-9 ]{0,254}: соответствие 0 - 254 буквенно-числовых или пробельных символов
  • $: Конец

Ещё вопросы

Сообщество Overcoder
Наверх
Меню