price="1.11"
case $price in
''|*[!0-9]*) echo "It is not an integer.";
;;
esac
Output: It is not an integer
。
以上代码只能验证正整数。
如何允许带小数点的正整数?一直在网上搜索无济于事
答案 0 :(得分:1)
以POSIX兼容的方式执行此操作非常棘手;您当前的模式与非 - 整数匹配。两个bash
扩展程序使这相当容易:
使用扩展模式
shopt -s extglob
case $price in
# +([0-9]) - match one or more integer digits
# ?(.+([0-9])) - match an optional dot followed by zero or more digits
+([0-9]))?(.*([0-9]))) echo "It is an integer" ;;
*) echo "Not an integer"
esac
使用正则表达式
if [[ $price =~ ^[0-9]+(.?[0-9]*)$ ]]; then
echo "It is an integer"
else
echo "Not an integer"
fi
(理论上,您应该能够使用POSIX命令expr
进行正则表达式匹配;我无法使其正常工作,并且您没有指定POSIX兼容性作为要求所以我不会担心它.POSIX模式匹配不足以匹配任意长的数字串。)
如果您只想匹配“十进制”整数,而不是任意浮点值,那么它当然更简单:
+([0-9])?(.)
[0-9]+\.?
答案 1 :(得分:-1)
试试这个正则表达式^(0*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$