Давайте посмотрим на следующие моменты:
Должны быть действительными символами UTF-8
Я бы предположил, что это больше вопрос выбора языка программирования, который вы выбрали,по крайней мере, пока вы не сообщите нам, что у вас есть необработанные октеты и хотите, чтобы регулярное выражение проверяло, что последовательность необработанных октетов является допустимой последовательностью UTF-8.
Не должно превышать 1500 байт
Это будет означать что-то вроде .{1,1500}
Не может содержать косую черту
Это будет означать что-то вроде [^/]{1,1500}
вместо .{1,1500}
.
Не может состоять только из одного периода или двойных периодов.
Это означает что-то вроде (?!\.\.?)
.
Невозможно сопоставитьрегулярное выражение __.*__
Это означает что-то вроде (?!__.*__)
.Возможно, это должно означать, что никакой ID не может начинаться с __
и заканчиваться __
, но, возможно, это означает, что ни один ID не может содержать подстроку, которая начинается/ заканчивается __
.Мой подход безопасен и отвергает все, что содержит подстроку.
Комбинируя вышесказанное, мы получаем что-то вроде:
^(?!\.\.?$)(?!.*__.*__)([^/]{1,1500})$
Сокращение максимальной длины до чего-то разумного, например 10, некоторые тестовые случаи:
Принять
foo
foo.
foo..
Отклонить
bar/
12345678901
foo__bar__
.
..
Скрипка