
我正在嘗試為新用戶制定規則。
我/etc/adduser.conf
通過添加以下行更改了文件:
NAME_REGEX="[A-Z]{1}[a-z]{5,9}$"
但在那之後,系統不接受任何用戶..總是說它與NAME_REGEX
in不匹配/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}$"