
Я пытаюсь установить правило для новых пользователей.
Я изменил /etc/adduser.conf
файл, добавив строку:
NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"
но после этого система не принимает ни одного пользователя.. всегда говорит, что он не соответствует NAME_REGEX
введенным данным /etc/adduser.conf
!
Когда я комментирую строку, она принимает любого пользователя, но я этого тоже не хочу! Я хочу, чтобы у всех пользователей была следующая политика:
должно начинаться с ЗАГЛАВНОЙ буквы
Имя пользователя должно содержать минимум 5 и максимум 9 букв. Например, «Newuser» должно быть принято, «newuser» и «Hereisanewuser» — нет!
Как мне действовать?
решение1
NAME_REGEX
После безуспешного тестирования нескольких из приведенных выше регулярных выражений ( \
по крайней мере, HTML-код скрывает некоторые символы) мне удалось написать правильное и работающее выражение, включающее символ точки, вот так:
NAME_REGEX="^[a-z][-a-z0-9_\.]*\$?$"
Это означает: Начинается с a-z
, за которым следует любое количество тире, или a-z
или 0-9
подчеркиваний, или точек, и может заканчиваться необязательным $
.
(Обратите внимание, что даже закомментированная строка конфигурации по умолчанию в adduser.conf
файлах некоторых дистрибутивов на базе Debian имеет $
неправильный синтаксис, просто \$
вместо \$?$
).
решение2
Использовать это:
NAME_REGEX="^[A-Z][[:alpha:]]{4,8}$"
Это будет соответствовать [A-Z]
началу имени, а затем имя может содержать любые буквенные символы, т.е. [A-Za-z]
общее количество символов будет от 5 до 9.
С другой стороны, если вам нужны только строчные буквы после первой заглавной:
NAME_REGEX="^[A-Z][a-z]{4,8}$"
Кроме того, если вам нужны любые числа или любые заглавные/строчные буквы (используя классы символов):
NAME_REGEX="^[A-Z]([[:alpha:]]|[[:digit:]]){4,8}$"
Использование диапазонов:
NAME_REGEX="^[A-Z]([A-Za-z]|[0-9]){4,8}$"
решение3
Правильные ответы уже есть, и ответ, который я собираюсь предоставить, в конечном итоге предлагает сделать ровно то же самое, что и другие ответы, так что технически это дубликат, но я думаю, что для пояснения лучше сделать это здесь.
NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"
Это регулярное выражение соответствует любой строке, последняя часть которой представляет собой подстроку длиной 6–10 символов, начинающуюся с заглавной буквы, поэтому оно соответствует таким строкам, как «usErname», «USErname», «12Ername».
Оставляя в стороне тот факт, что это не то, чего вы ожидаете, тот факт, что ни одно имя пользователя не принимается, вероятно (и извините за «вероятно», но/etc/adduser.conf
очень плохо документирован) из-за того, что регулярное выражение должно быть закреплено как в начале, так и в конце (другая возможность заключается в том, что вы всегда проводили тестирование, используя имена пользователей, не соответствующие вышеуказанному критерию).
Итак, как уже было предложено, сначала закрепим начало строки:
NAME_REGEX="^[A-Z]{1}[a-z]{5,9}$"
Затем можно удалить спецификатор количества вхождений {1}
после класса символов [A-Z]
, поскольку по умолчанию класс символов соответствует только одному вхождению:
NAME_REGEX="^[A-Z][a-z]{5,9}$"
Затем следует уменьшить минимальное и максимальное количество вхождений в спецификаторе количества вхождений {5,9}
до 4
и 8
, поскольку вы хотите принимать строки длиной от 5 до 9 символов:
NAME_REGEX="^[A-Z][a-z]{4,8}$"
решение4
Проверено, работает.
NAME_REGEX="^[A-Z][a-z]{4,8}$"
похожий:регулярное выражение-для-проверки-первый-символ-в-верхнем-регистре