我正在尝试为新用户设置一条规则。
我/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”也不可以!
我该如何继续?
答案1
在测试了上述几个正则表达式NAME_REGEX
均未成功(\
至少 html 代码隐藏了某些字符)之后,我设法编写了一个正确且有效的正则表达式,其中包括句点符号,如下所示:
NAME_REGEX="^[a-z][-a-z0-9_\.]*\$?$"
这意味着:以 开头a-z
,后跟任意数量的破折号或a-z
或0-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}
为4
和8
,因为您想要接受长度为 5-9 个字符的字符串:
NAME_REGEX="^[A-Z][a-z]{4,8}$"