adduser.conf NAME_REGEX не работает
Я пытаюсь установить правило для новых пользователей.
Я изменил /etc/adduser.conf
файл, добавив строку:
NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"
но после этого система не принимает ни одного пользователя.. всегда говорит, что он не соответствует NAME_REGEX
в /etc/adduser.conf
!
Когда я комментирую строку, она принимает любого пользователя, но я тоже этого не хочу! Я хочу, чтобы у всех пользователей была следующая политика:
должен начинаться с буквы CAPS-ON-Letter
Имя пользователя должно содержать не менее 5 букв и не более 9 букв. например "Newuser" должен быть принят, "newuser" нет и "Hereisanewuser" тоже!
Как мне поступить?
5 ответов
После тестирования нескольких из приведенных выше регулярных выражений для NAME_REGEX
безуспешно (HTML-код скрывает некоторые \
символы, по крайней мере), мне удалось написать правильный и рабочий, включая символ точки, вот так:
NAME_REGEX="^[a-z][-a-z0-9_\.]*\$?$"
Это значит: начните с a-z
с последующим любым количеством тире или a-z
или же 0-9
или подчеркивания или точки, и может заканчиваться необязательным $
,
(Обратите внимание, что даже некоторые закомментированные строки конфигурации по умолчанию в некоторых дистрибутивах на основе Debian ' adduser.conf
файл, есть $
неправильный синтаксис, просто \$
вместо \$?$
).
Использовать этот:
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}$"
Уже есть правильные ответы, и ответ, который я собираюсь дать, предлагает в конце концов сделать именно то, что уже предлагали другие ответы, так что технически это дубликат, но я думаю, что для объяснения здесь лучше.
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}$"
Проверено это, и это работает.
NAME_REGEX="^[A-Z][a-z]{4,8}$"
аналогично: регулярное выражение для проверки-если-первый-символ-в верхнем регистре
Вы должны использовать имя пользователя без верхнего регистра