【问题标题】:preg_replace - strip unwanted characters from string to return numeric valuepreg_replace - 从字符串中去除不需要的字符以返回数值
【发布时间】:2011-06-06 02:02:00
【问题描述】:

我讨厌正则表达式,我希望有人可以帮助使用 preg_replace 的正则表达式。

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

字符串格式可以如下:

一些文字 100 英镑

100 英镑的一些文字

一些文本 100 一些文本

非常感谢

【问题讨论】:

  • 所以所有这些都产生 100,对吧? 1abc00 会发生什么?
  • 更好 - £1.00 怎么样?

标签: php regex string


【解决方案1】:
$NumericVal = preg_replace("/[^0-9]/","",$TextVariable);

[ ] 中的 ^ 表示除以下之外的任何内容

编辑 删除了多余的+

【讨论】:

  • 出于好奇为什么不使用\D...?网络上的许多答案使用非数字而不是内置的“非数字”
  • @nicorellius 我在回答时写得很快,所以并没有真正想到要使用它,并且自从编辑它以使用 \d 之后就没有想到它。尽管对于不熟悉不同正则表达式选项的人来说,它更具可读性。
【解决方案2】:
$l = preg_replace("/[^A-Z0-9a-z\w ]/u", '', $l);

适用于 UTF-8,仅允许 A-Z a-z 0-9 łwóc... 等

【讨论】:

    【解决方案3】:
    preg_replace('/[^0-9]/','',$text);
    

    【讨论】:

    • 这也为 Boltclock 的示例提供了 100
    • 你需要 + 否则它只会替换第一个非数字
    • 不,这部分适用于preg_match,但不适用于preg_replace。就像任何普通的替换 preg_replace 一样,每次出现的字符 [^0-9] 什么都替换,然后用下一个字符继续搜索。
    • @Patrick - 如果是这种情况,它将在 acb100def 上失败 - 解决方案将是 /g 标志。 JavaScript 是这样,但 PHP 不是。
    【解决方案4】:

    试试这个:

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

    也可以使用preg_match获取第一个号码:

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

    【讨论】:

    • 注意 \D 与 [^\d] 相同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多