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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BeauXie/article/details/70312906

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

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

正则表达式说明:

[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]+)?:与第一部分中的一样;

猜你喜欢

转载自blog.csdn.net/BeauXie/article/details/70312906
今日推荐