检查带小数的数字

检查带小数的数字

我有如下的表达:

echo “B1500.00” | egrep '^[(-|+)]?[0-9]+(\.[0-9]{2})?$'

我正在检查带小数的数字,如果字段中存在非数字的内容,我想要一个错误。

上面的表达式似乎没有出错。如果我有一个像 1500.00 或 -1500.00 这样的实际数字,则表达式返回为数字。我确信我缺少一些东西。

答案1

egrep这些引号是 unicode 字符,它们作为要匹配的表达式的一部分传递。

另外,第一个字符类可能不完全是您想要的,请尝试:

echo B1500.00 | egrep '^[-+]?[0-9]+(\.[0-9]{2})?$'

没有匹配项,而

echo 1500.00 | egrep '^[-+]?[0-9]+(\.[0-9]{2})?$'

确实匹配1500.00

我提供的字符类将恰好匹配,+或者-同时您原来的字符类也会匹配|以及打开和关闭括号,我认为这可能不是您想要的。

正如科斯塔斯指出的那样,您可以告诉egrep您想要匹配整行并忽略开始和结束锚点,如下所示:

echo 1500.00 | egrep -x '[-+]?[0-9]+(\.[0-9]{2})?'

相关内容