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

use*_*341 40 php regex

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

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

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

非常感谢您的帮助.

bul*_*ley 120

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

$output = preg_replace( '/[^0-9]/', '', $string );
Run Code Online (Sandbox Code Playgroud)

  • 只需加上"." 在`[bracket]`里面.例如`'/ [^.0-9] /'` - 请注意,如果它在括号外,它将成为通配符.并且,这将涵盖您的用例的90%,但也将允许任何订单,如"123"的边缘情况.和".123"将起作用.一个好主意是根据您知道应该或不应该失败的示例来测试您的正则表达式.像[这一个](http://www.gskinner.com/RegExr/)这样的网站效果很好. (6认同)
  • 很高兴知道在当今时代可以将 `[^0-9]` 替换为 `\D` (2认同)

net*_*der 41

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

$output = preg_replace('/[^0-9]/', '', $input);
Run Code Online (Sandbox Code Playgroud)

说明:

  • [0-9] 匹配0到9之间的任何数字.
  • ^否定一种[]模式.
  • 因此,[^0-9]匹配任何不是数字的东西,因为我们正在使用preg_replace它们,它们将被替换为任何东西''(第二个参数preg_replace).


小智 16

这是正确的答案

preg_match("/^[0-9]+$/", $yourstr);
Run Code Online (Sandbox Code Playgroud)

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

快速解释:

'^' :表示它应该以以下内容开头(在我们的例子中是一系列数字 [0-9] ) (以避免类似 ("abdjdf125") 的情况)

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

'$' :表示在我们的模式之后字符串应该结束 (以避免类似 ("125abdjdf") 的情况)


Sil*_*eNT 6

你可以尝试一下:

$string = preg_replace('/[^0-9]/', '', $string);
Run Code Online (Sandbox Code Playgroud)

干杯.