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

删除前后字符

  •  0
  • Dipak  · 技术社区  · 6 年前

    这里,我正在使用 strstr 删除后字符和 substr 用于删除前面的字符。但是如何同时删除前后的所有字符?

    我只需要 80 从这个变量 $mrk = 'Science-80_John' 省略 Science John .

    我正在做什么

    $mrk = 'Science-80_John';
    
    $mark = substr($mrk,strpos($mrk,'-')+1);
    //output: 80_John
    
    echo strstr($mark, '_', true);
    //output: 80
    

    还有其他短的或最好的方法吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   hellork    6 年前

    因为OP要求 短的 最好的 方式。数字\来自\字符串 可能执行 最好用石膏。忽略 minus signs (在这个例子中可以是连字符),我们得到一个正整数。

    >>> $mrk = 'Science-80_John';
    => "Science-80_John"
    >>> $num = (int)strpbrk ($mrk, "0123456789");
    => 80
    

    上面的用例假设,除了提取一个正整数之外, scientific notation 可以。约翰决定做一个聪明的小伙子,把他的签名改成一个很大的数字。我们必须决定在什么情况下系统应该接受或拒绝 科学记数法 .

    >>> $mrk = 'Science-80E+21_John45';
    >>> $num = (int)strpbrk ($mrk, "0123456789");
    => 9223372036854775807 // ack!
    
    >>> $pat = "0123456789";
    >>> $num = strpbrk ($mrk, $pat);
    >>> $num = substr($num,0 ,strspn($num, $pat));
    =>  "80"
    

    由于新的返回值由数字组成,因此我们不再严格需要强制转换,因为PHP type juggling . 如果没有数字,此解决方案将返回空字符串, "" 如果在以后的计算中使用,将产生错误。铸造到 (int) 会静静地回来 0 但不要告诉我们数据库是否需要更正。在这种情况下,哪一个更有效?另一个设计决策。

    字符串函数还可以避免在某些解决方案中使用regex的潜在缺陷 Extract numbers from a string . 如果$str中有一个额外的“45”,会发生什么?结果, 8045 可能是不可取的。

    >>> $mrk = 'Science-80_John45';
    => "Science-80_John45"
    >>> $newStr = preg_replace("/\D+/", "", $mrk);
    => "8045"
    
        2
  •  1
  •   Mohammad DefenestrationDay    6 年前

    你可以在里面使用regex preg_replace() 并删除添加非数字字符

    $mrk = 'Science-80_John';
    $newStr = preg_replace("/\D+/", "", $mrk);
    // 80