【问题标题】:Regular expression that allow hyphen symbol between number and character but remove hyphen symbol between characters允许数字和字符之间的连字符但删除字符之间的连字符的正则表达式
【发布时间】:2023-03-12 04:22:02
【问题描述】:

我正在尝试编写一个正则表达式,允许数字和字符之间的连字符 (-) 但删除字符之间的连字符并将其替换为 PHP 字符串中的空格。我是正则表达式的初学者,不知道如何为此编写正则表达式,任何人都可以帮助

这就是我需要的,我在 PHP 中有一个这样的字符串

$string ="Al-Abbas - Manama - 100" or
$string ="100 - Al-Abbas - Manama"

应用正则表达式后我需要的输出必须是这样的

Al Abbas Manama - 100
100 - Al Abbas Manama 

还有其他方法请帮忙

【问题讨论】:

    标签: php regex


    【解决方案1】:

    你可以使用这个正则表达式:

    $string ="Al-Abbas - Manama - 100"
    
    $repl = preg_replace('/\d\h*-\h*(*SKIP)(*F)|-(?!\h*\d)/', ' ', $string);
    
    • 如果连字符出现在数字之后,\d\h*-\h*(*SKIP)(*F) 将导致匹配失败
    • 如果连字符旁边有数字,(?!\h*\d) 将导致断言失败

    RegEx Demo

    【讨论】:

    • 谢谢,但是当数字排在第一位时,我也想以这种方式进行这项工作 299 - bandar Al-Seef
    • 哥们,我需要一点帮助可以请将此表达式更改为 js 以及
    • JS 不支持相同的 PCRE 功能,请创建一个新问题以获得更好的答案。
    【解决方案2】:

    你可以使用纯PHP:

    $string1 ="Al-Abbas - Manama - 100";
    $string2 ="100 - Al-Abbas - Manama";
    
    function convertString($string) {
        $strArr = explode("-", $string);
        $new = '';
        foreach ($strArr AS $key => $val) {
            $val = trim($val);
            if (is_numeric($val)) {
                if ($key === 0) $new .= $val . " - ";
                else            $new .= " - " . $val;
            } else {
                $new .= " " . $val;
            }
        }
        return $new;
    }
    
    echo convertString($string1); //output: Al Abbas Manama - 100
    echo convertString($string2); //output: 100 - Al Abbas Manama
    

    【讨论】:

    • 如果订单发生变化,比如号码先出现,它会起作用吗?
    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多