2012-02-27 123 views
3

我想檢查一個字符串,所以它只包含字符0-9 a-z -只允許一些字符與grep?

當我做

regex='[-a-z0-9]*' 
string='abcd!' 
if [[ $string =~ $regex ]] 
then 
    echo "valid" 
else 
    echo "not valid" 
fi 

它輸出valid,在那裏我本來期望not valid因爲$string包含!

回答

4

試試這個:regex='^[-a-z0-9]*$'。它將強制整個線路匹配這個類。否則,只有單個匹配或根本不匹配(由於*)將返回有效。 ^...$表示字符串開始和結束時沒有任何不匹配的內容。

+5

根據約束,如果你想禁止空字符串,則將'*'改爲'+'。 – 2012-02-27 16:42:22

1

你將不得不爲這個正則表達式的工作增加邊界。

'[-a-z0-9] *'表示:匹配字符串中任意位置的這些字符0或更多次。

因此增加啓動和換行字符結束的正則表達式會做你在找什麼:

regex='^[-a-z0-9]*$' 

下一步是要的出現的次數限制「 - 」只有一次。破折號charcter可以在字符串的開始或結尾出現嗎?如果不嘗試:

regex='^[a-z0-9]*-?[a-z0-9]*$' 

希望這會有所幫助。