php正则验证数字小数点减号,使用正则表达式校验字符串是否为数值(包含小数与负数)…

  • Post author:
  • Post category:php


网上查阅的很多资料也有涉及到用正则表达式来校验数值(包含小数与负数),但很多都是不全的,比如  “-“、”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]+)?:与第一部分中的一样;