【问题标题】:Remove plus sign (+) from string [duplicate]从字符串中删除加号 (+) [重复]
【发布时间】:2013-10-23 20:51:46
【问题描述】:

我正在尝试使用 preg_replace() 从我的字符串中删除一个加号 (+)。我用过

$variation = preg_replace('/[^\p{L}\p{N}\s]/u', '', $variation);

但这也删除了句点 (.),我在字符串中需要它。有没有办法去掉加号?

【问题讨论】:

  • preg_replace('/\+/', '', $string);
  • str_replace('+', '', $string);
  • 这些字符串不会只是数字吧? “+2.87”
  • @AbraCadaver 是的,它们只是数字。我还需要删除美元符号 ($)
  • @OP 请注意上面简单的str_replace() 评论的投票数。这不是需要正则表达式的问题,因此正则表达式是不必要的非最佳解决方案。

标签: php regex


【解决方案1】:

虽然这个问题的原始答案确实达到了预期的效果,但这并不是完成这个简单任务的最有效方法。如上面的 cmets 所述,在这种情况下首选使用 str_replace()

$variation = str_replace("+", "", $variation);

原始答案:

这适用于删除加号:

$variation = preg_replace(/[+]/, "", $variation);

你可以在这里看到它的工作原理:http://www.phpliveregex.com/p/1Fb(确保你选择了 preg_replace 函数)

【讨论】:

  • 这似乎根本不是需要正则表达式解决的问题。
  • 感谢 Crackertastic.Regex 帮助了我很多
【解决方案2】:

对于+$7.99 可能:

$string = ltrim($string, '+$');

或者如果出于某种原因它们在两端使用trim()

【讨论】:

    【解决方案3】:

    鉴于$value = '+$2.47';,你真的不需要正则表达式:

    $value = (float) strtr($value, [
        '$' => '',
        '+' => '',
    ]);
    
    var_dump($value); // double(2.47)
    

    注意(float) 演员表;我认为这可能是有利的,因为您正在使用数值。

    或者,如果您一心想要使用preg_replace,那么匹配一个否定类:

    $value = (float) preg_replace('/[^0-9\.]/', '', $value);
    
    var_dump($value); // double(2.47)
    

    这将替换任何非数字非点 (.) 字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 2014-03-27
      • 2020-11-19
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      相关资源
      最近更新 更多