preg_replace - 从字符串中去除非数字字符以返回数字值

7

我讨厌正则表达式,希望有人能帮忙写一个与 preg_replace 一起使用的正则表达式。

我想要用 preg_replace 去除字符串中不需要的字符,只返回数字值。

字符串格式可能如下:

SOME TEXT £100

£100 SOME TEXT

SOME TEXT 100 SOME TEXT

非常感谢。


1
所有这些都等于100,对吗?1abc00会发生什么? - BoltClock
1
更好的是 - £1.00 怎么样? - Kobi
4个回答

17
$NumericVal = preg_replace("/[^0-9]/","",$TextVariable);

方括号内的 ^ 表示除了下列字符之外的任何字符

编辑 移除了不必要的+


出于好奇,为什么不使用\D呢?许多网络答案使用非数字而不是内置的“非数字”。 - nicorellius
@nicorellius 我当时回答时很快就写了这个,所以没有想到使用\d,也没有考虑过编辑它来使用\d。尽管对于不熟悉不同正则表达式选项的人来说,它更易读。 - Patrick Evans

8
$l = preg_replace("/[^A-Z0-9a-z\w ]/u", '', $l);

此程序支持UTF-8编码,只允许使用A-Z a-z 0-9 łwóc等字符。


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

这也给出了Boltclock的例子中的“100”。 - AndreKR
你需要使用 +,否则它只会替换第一个非数字字符。 - Patrick Evans
1
不,这对于 preg_match 部分正确,但对于 preg_replace 不正确。就像任何普通的替换一样,preg_replace 会将每个字符的出现次数替换为 [^0-9],然后继续搜索下一个字符。 - AndreKR
@Patrick - 如果是这种情况,它会在 acb100def 失败 - 解决方案是使用 /g 标志。这对于 JavaScript 是正确的,但在 PHP 中不是。 - Kobi

0

试试这个:

preg_replace("/\D+/", "", "SOME TEXT £100")

你也可以使用preg_match来获取第一个数字:

preg_match("/\d+/", "SOME TEXT £100", $matches);
$number = $matches[0];

请注意,\D 与 [^\d] 相同。 - MarcoZen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接