使用正则表达式校验字符串是否为数值(包含小数与负数)

网上查阅的很多资料也有涉及到用正则表达式来校验数值(包含小数与负数),但很多都是不全的,比如  "-"、"12."都是可以的,所以自己动手写了一个,虽然不是最优的,但最起码能达到自己想要的效果。

    /**
     * 校验字符串是否是数值(包含小数与负数)
     * 示例:
     * false : . 1. 1sr -  12. -12.
     * true: -12 -12.0 -12.056 12 12.0 12.056
     *
     * @param str 需要校验的字符串
     * @return false :不是数值 true:是数值
     */
    public static Boolean checkNumber(String str) {
        String regex = "-[0-9]+(\\.[0-9]+)?|[0-9]+(\\.[0-9]+)?";
        return str != null && str.matches(regex);
    }

 

正则表达式说明:

 

[0-9]:字符范围。匹配指定范围内的任意字符,例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。;

+:匹配前面的子表达式一次或多次(大于等于1次);

?:匹配前面的子表达式零次或一次;

|:匹配'|'前面的表达式或'|'后面的表达式,比如:x|y,匹配x或y;

 

因此,代码中的regex="-[0-9]+(\\.[0-9]+)?|[0-9]+(\\.[0-9]+)?"可以以'|'分为以下两大部分,当输入的字符串只要符合以下两部分的任一部分都会返回true:

第一部分是'|'之前的,用于校验负数:

-[0-9]+:以减号'-'开头,0-9之间的数字出现一次或多次,这样可以允许负数,当出现负号时,后面必须有数字;

(\\.[0-9]+)?:以下情况出现0次或1次:以小数点开头,0-9之间的数字出现一次或多次,这样就避免了'12.'(注意小数点)也正确的结果;

第二部分是'|'之后的,用以校验非负数:

[0-9]+:0-9之间的数字出现一次或多次;

 

(\\.[0-9]+)?:与第一部分中的一样;

 

2021年4月27日更新:

修复"0x123"也被验证为数字的问题,修改正则表达式:

原:   -[0-9]+(.[0-9]+)?|[0-9]+(.[0-9]+)?

改为:  -[0-9]+(\\.[0-9]+)?|[0-9]+(\\.[0-9]+)?

加上\\转义符。

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值