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. 必须以 CAPS-ON-Letter 开头

  2. 用户名必须至少包含 5 个字母,最多包含 9 个字母。例如,“Newuser”可以接受,“newuser”不可以,“Hereisanewuser”也不可以!

我该如何继续?

答案1

在测试了上述几个正则表达式NAME_REGEX均未成功(\至少 html 代码隐藏了某些字符)之后,我设法编写了一个正确且有效的正则表达式,其中包括句点符号,如下所示:

NAME_REGEX="^[a-z][-a-z0-9_\.]*\$?$"

这意味着:以 开头a-z,后跟任意数量的破折号或a-z0-9或下划线或句点,并且可以以可选的 结尾$

(请注意,即使是某些基于 Debian 的发行版文件中默认注释掉的配置行adduser.conf$语法也是错误的,只是\$变成了\$?$)。

答案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}48,因为您想要接受长度为 5-9 个字符的字符串:

NAME_REGEX="^[A-Z][a-z]{4,8}$"

答案4

已测试并且有效。

NAME_REGEX="^[A-Z][a-z]{4,8}$"

相似的:正则表达式检查第一个字符是否为大写

相关内容