代码之家  ›  专栏  ›  技术社区  ›  thevoipman

一个数字列表,同时去掉除数字以外的所有内容

  •  2
  • thevoipman  · 技术社区  · 12 年前

    我有一个这样的数字列表:

    123-4-5679 tha
    546-5465-7 dsf
    98-4564-64 ds8
    

    我想在剥离除数字之外的所有内容的同时,将其自身的价值爆发出来。我在做,但它似乎保留了一切,但它确实给了我每条线的价值

    $pn = preg_replace("/\r/", "\n", preg_replace("/\r\n/", "\n", $_POST['phone']));
    $phone_numbers = explode("\n", $pn);
    
    4 回复  |  直到 12 年前
        1
  •  4
  •   Nick Fury    12 年前

    您也可以使用正则表达式中的一行快速代码来完成此操作。

    preg_match_all(":([0-9-]+):mi", $_POST["phone"], $match);
    

    这是一个 example

    编辑: 要删除连字符,请遍历结果并用空字符串替换连字符

    preg_match_all(":([0-9-]+):mi", $_POST["phone"], $matches);
    
    // remove extra match array
    $matches = array_shift($matches);
    
    foreach( $matches as & $match )
    {
       $match = preg_replace(":-:", "", $match);
    }
    

    已更新 example

        2
  •  1
  •   Blender    12 年前

    除了数字和换行符,我会把所有东西都去掉:

    $cleaned = preg_replace("/[^0-9\n]/", "", $_POST['phone']);
    

    然后 explode 它:

    $numbers = explode("\n", $cleaned);
    
        3
  •  0
  •   hakre    12 年前

    保留所有数字,匹配除行分隔符之外的所有其他数字:

    ~(?![\d-]+).*~
    

    在PHP中使用空字符串替换每个匹配项

    $numbers = preg_replace("~(?![\d-]+).*~", '', $phone);
    

    结果:

    123-4-5679
    546-5465-7
    98-4564-64
    
        4
  •  -2
  •   Prashank    12 年前

    好吧,我是不是错过了什么?

    $phone = explode(' ', $_POST['phone']);
    $phone_number = $phone[0];
    

    这不管用吗?