正規表示式小寫腳本驗證

正規表示式小寫腳本驗證

我正在做一項家庭作業,以驗證輸入的字串是否全部為小寫字母。這是我們提供的基本腳本。

這是我需要更改的行。

if [[ "$input" =~ Add your regular expression here ]]

如果我[a-z]輸入僅包含一個小寫字母的任何內容,則將進行驗證。 「布萊恩[[:lower:]]」會驗證,而「貓」則不會,但胡言亂語,這樣就trhrh可以了。我不知道這裡使用的正規表示式。我將非常感謝任何幫助。

答案1

測試字串是否包含以下內容不是一個小寫字母。

if [[ "$input" =~ [^[:lower:]] ]]; then
    # contains something that is not a lower case letter
else
    # contain only lower case letters
fi

或者,

if ! [[ "$input" =~ [^[:lower:]] ]]; then
    # contain only lower case letters
fi

^括號表達式開頭的 會反轉匹配的含義,以便匹配[^abc]任何單個字符不是 ab, 或者c

或者,透過在兩端錨定字串來匹配字串的整個長度:

if [[ "$input" =~ ^[[:lower:]]+$ ]]; then
    # contain only lower case letters
fi

^表達式開頭的 只錨定到字串的開頭,而結尾$的 錨定到字串的結尾。在這些之間,我們只允許使用小寫字母[[:lower:]]+,即一個或多個小寫字母。使用*in 代替+也可以使表達式成功匹配空字串。

[[:lower:]]另請注意(匹配單個小寫字母) 和[:lower:]匹配字元:lowe或)之間的差異r。在最初的問題中,您說 that與while isn'tBrian匹配,現在應該有意義了。在編輯中,您將表達式變更為正確的,現在也應該匹配。[:lower:]cats[[:lower:]]cats


為正規表示式匹配設定了通配符匹配:

if [[ "$input" == *[![:lower:]]* ]]; then
    # contains something that is not a lower case letter
else
    # contain only lower case letters
fi

在通配模式中,!括號表達式的開頭與^正規表示式情況下的工作方式相同(儘管我相信在通配模式中bash也可以識別^)。

答案2

如果您願意,您也可以檢查此襯墊:

echo "$input" | grep -qE '^[[:lower:]]*$' && echo "All LowerCase" || echo "Not All LowerCase"

相關內容