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

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

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

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

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

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

  1. должен начинаться с буквы CAPS-ON-Letter

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

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

Вы должны использовать имя пользователя без верхнего регистра

Другие вопросы по тегам