adduser.conf NAME_REGEX 不起作用

adduser.conf NAME_REGEX 不起作用

我正在嘗試為新用戶制定規則。

/etc/adduser.conf通過添加以下行更改了文件:

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

但在那之後,系統不接受任何用戶..總是說它與NAME_REGEXin不匹配/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}$"

相似的:正規表示式檢查第一個字元是否大寫

相關內容