PHP正则表达式 - 仅限过滤器编号

时间:2011-03-29 14:24:42

标签: php regex

我知道这听起来可能是一个非常简单的问题,但我正在努力确保提供的字符串是数字/十进制格式,以便稍后使用PHP的number_format()函数。

我该怎么做 - 比如有人在文本字段中键入15:00 - 我应该使用正则表达式和php函数从中删除冒号并使其仅返回有效字符。

preg_match()返回数组 - 所以我不能将结果传递给number_format(),除非我将它内爆(或类似的东西)。

非常感谢您的帮助。

8 个答案:

答案 0 :(得分:112)

使用is_numericintval可能是验证号码的最佳方式,但要回答您的问题,您可以尝试使用preg_replace。此示例删除所有非数字字符:

$output = preg_replace( '/[^0-9]/', '', $string );

答案 1 :(得分:39)

删除任何不是数字的内容:

$output = preg_replace('/[^0-9]/', '', $input);

说明:

  • [0-9]匹配0到9之间的任何数字。
  • ^否定了[]模式。
  • 因此,[^0-9]匹配任何不是数字的内容,因为我们使用的是preg_replace,所以它们将被''取代(preg_replace的第二个参数)。

答案 2 :(得分:6)

你可以试试那个:

$string = preg_replace('/[^0-9]/', '', $string);

干杯。

答案 3 :(得分:3)

使用内置的php函数is_numeric来检查值是否为数值。

答案 4 :(得分:3)

这是正确的答案

preg_match("/^[0-9]+$/", $yourstr);

如果匹配,此函数返回TRUE(1),否则返回FALSE(0)

快速说明:

'^' : 意味着它应该以以下开头(在我们的例子中是一个数字范围 [0-9] ) (为了避免像 ("abdjdf125") 这样的情况)

'+' : 表示应该至少有一位

'$' : 意味着在我们的模式之后字符串应该结束 (为了避免像 ("125abdjdf") 这样的情况)

答案 5 :(得分:1)

仅获取正则表达式字符串中数字的另一种方法如下所示:

$output = preg_replace("/\D+/", "", $input);

答案 6 :(得分:0)

如果你只想要整数,你可以这样做。

function make_whole($v){
    $v = floor($v);
    if(is_numeric($v)){
      echo (int)$v;
      // if you want only positive whole numbers
      //echo (int)$v = abs($v);
    }
}

答案 7 :(得分:0)

preg_replace("/\D/", '', $value);