只允许一些字符与grep?

我想检查一个string,所以它只包含字符0-9 az -

当我做

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

它输出valid ,我会预期not valid因为$string包含一个!

试试这个: regex='^[-a-z0-9]*$' 。 这将迫使完整的线匹配这个类。 否则,只有一个匹配,或根本不匹配(由于* )将返回有效。 ^...$说,字符串开始和结束没有任何不匹配的东西。

你将不得不增加这个正则表达式的工作边界。

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

所以添加行和字符的开始和结束的正则表达式将做你正在寻找的东西:

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

下一步是将“ – ”的出现次数限制为一次。 破折号charcter可以发生在字符串的开始或结束? 如果不尝试:

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

希望这可以帮助。