PHP 正则表达式 - 仅过滤器编号
Posted
技术标签:
【中文标题】PHP 正则表达式 - 仅过滤器编号【英文标题】:PHP regular expression - filter number only 【发布时间】:2011-07-25 08:24:17 【问题描述】:我知道这听起来可能是一个非常愚蠢的问题,但我试图确保提供的字符串是数字/十进制格式,以便稍后与 php 的 number_format() 函数一起使用。
我会怎么做 - 假设有人在文本字段中输入 15:00 - 我应该使用什么正则表达式和 php 函数来删除冒号并使其只返回有效字符。
preg_match() 返回数组 - 所以我不能将结果传递给 number_format() 除非我 implode() 它或类似的东西。
非常感谢您的帮助。
【问题讨论】:
123.4.5 or 123:4\5 or abs:4:5
-> 你希望结果是什么数字?
【参考方案1】:
使用is_numeric 或intval 可能是在这里验证数字的最佳方式,但要回答您的问题,您可以尝试改用preg_replace。此示例删除所有非数字字符:
$output = preg_replace( '/[^0-9]/', '', $string );
【讨论】:
放一个“.”在[brackets]
内。例如。 '/[^.0-9]/'
-- 请注意,如果它在括号之外,它将成为通配符。而且,这将涵盖 90% 的用例,但也允许任何订单,例如“123”等边缘情况。并且“.123”将起作用。一个好主意是针对您知道应该或不应该失败的示例测试您的正则表达式。像this one 这样的网站效果很好。
除了@buley引用的那个网站,另外一个很不错的就是regex101.com!
我在 big int 上使用 intval,它给了我最大 int 值,即 2147483647,所以这对我很有用。,
很高兴知道在当今时代可以将[^0-9]
替换为\D
【参考方案2】:
要删除任何不是数字的内容:
$output = preg_replace('/[^0-9]/', '', $input);
解释:
[0-9]
匹配 0 到 9 之间的任意数字。
^
否定 []
模式。
所以,[^0-9]
匹配任何不是数字的东西,并且由于我们使用的是 preg_replace
,它们将被 ''
(preg_replace
的第二个参数)替换。
【讨论】:
【参考方案3】:你可以试试那个:
$string = preg_replace('/[^0-9]/', '', $string);
干杯。
【讨论】:
【参考方案4】:另一种只获取正则表达式字符串中数字的方法如下所示:
$output = preg_replace("/\D+/", "", $input);
【讨论】:
有谁知道\D
特殊字符的PHP 文档在哪里?我只能在这个注释中找到它的提及:php.net/manual/en/function.preg-replace.php#89364 但想找到它的实际文档 - 谢谢
字符d含义:匹配一个数字,相当于[0-9]。例如:/d/
或 /[0–9]/
匹配“B2 是套房号”中的“2”。 字符D含义:匹配任何非数字,相当于[0-9]。例如:/D/
或 /[0-9]/
匹配“B2 是套房号”中的“B”。 来源:medium.com/@mena.meseha/…【参考方案5】:
这是正确的答案
preg_match("/^[0-9]+$/", $yourstr);
如果匹配则此函数返回 TRUE(1),否则返回 FALSE(0)
快速解释:
'^' : 意味着它应该以以下开头(在我们的例子中是一个数字范围 [0-9] ) (为了避免像 ("abdjdf125") 这样的情况)
'+' : 表示应该至少有一位数
'$' : 意味着在我们的模式之后字符串应该结束 (为了避免像 ("125abdjdf") 这样的情况)
【讨论】:
【参考方案6】:使用内置的 php 函数is_numeric
来检查该值是否为数字。
【讨论】:
我正在使用 is_numeric - 但这只返回布尔值 - 所以如果不是,我就没有任何价值。我在这里面临的问题是,在测试应用程序期间,有人输入了冒号 (:) 而不是点 (.) 作为小数点分隔符 - 这导致 number_format() 出现错误 123.4.5 -> 数字是多少?is_numeric
将返回true
为-234, -10
等等。【参考方案7】:
如果你只想要整数,你可以这样做。
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);
【讨论】:
【参考方案8】:preg_replace("/\D/", '', $value);
【讨论】:
以上是关于PHP 正则表达式 - 仅过滤器编号的主要内容,如果未能解决你的问题,请参考以下文章
高级正则技巧PHP正则表达式过滤html标签属性(DEMO)