adduser.conf NAME_REGEX не работает

adduser.conf NAME_REGEX не работает

Я пытаюсь установить правило для новых пользователей.

Я изменил /etc/adduser.confфайл, добавив строку:

NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"

но после этого система не принимает ни одного пользователя.. всегда говорит, что он не соответствует NAME_REGEXвведенным данным /etc/adduser.conf!

Когда я комментирую строку, она принимает любого пользователя, но я этого тоже не хочу! Я хочу, чтобы у всех пользователей была следующая политика:

  1. должно начинаться с ЗАГЛАВНОЙ буквы

  2. Имя пользователя должно содержать минимум 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}$"

похожий:регулярное выражение-для-проверки-первый-символ-в-верхнем-регистре

Связанный контент