0

我有这个片段:

if [[ $1 =~ ^[+-]?[0-9]+\.?[0-9]*$ ]]; then
     echo 'version is good'
     exit 0
else 
     exit 1
fi

问题是,片段$1 =~ ^[+-]?[0-9]+\.?[0-9]*$应该只验证格式为number.number

目前,这段代码将输入验证为

1
01
0.1

有没有办法让代码只接受格式为0.1 / 0.3.2 / 0.1.141等的输入?

提前致谢。

编辑:

为了澄清这个问题,代码应该只接受用点分隔的数字,比如软件程序版本控制。

4

2 回答 2

2

我建议这个正则表达式:^[0-9]+(\.[0-9]+){1,2}$

于 2021-11-27T04:25:39.090 回答
0

我建议不使用正则表达式:

[[ "0" == ?([+-])+([0-9]).+([0-9.]) ]] && echo OK # Nothing 
[[ "01" == ?([+-])+([0-9]).+([0-9.]) ]] && echo OK # Nothing 
[[ "0.1" == ?([+-])+([0-9]).+([0-9.]) ]] && echo OK # OK 
[[ "0.3.2" == ?([+-])+([0-9]).+([0-9.]) ]] && echo OK # OK 
[[ "0.1.141" == ?([+-])+([0-9]).+([0-9.]) ]] && echo OK # OK
[[ "10.1.141" == ?([+-])+([0-9]).+([0-9.]) ]] && echo OK # OK

为了澄清这个问题,代码应该只接受用点分隔的数字,比如软件程序版本控制。

[[ "0" == +([0-9]).+([0-9.]) ]] && echo OK # Nothing 
[[ "01" == +([0-9]).+([0-9.]) ]] && echo OK # Nothing 
[[ "0.1" == +([0-9]).+([0-9.]) ]] && echo OK # OK 
[[ "0.3.2" == +([0-9]).+([0-9.]) ]] && echo OK # OK 
[[ "0.1.141" == +([0-9]).+([0-9.]) ]] && echo OK # OK
[[ "10.1.141" == +([0-9]).+([0-9.]) ]] && echo OK # OK
于 2021-11-27T10:34:19.517 回答