【问题标题】:PHP Basic Regex preg replace not working on end of string charsPHP Basic Regex preg replace在字符串字符的末尾不起作用
【发布时间】:2014-05-05 12:15:35
【问题描述】:

我有一个通过用户输入发送电子邮件的电子邮件功能。我的一些用户从他们的客户那里复制/粘贴电子邮件地址,并且它周围环绕着大于/小于符号(>

示例:

我正在尝试阅读这些符号,以便获得正确的电子邮件地址。我尝试了 preg 替换,但它不适用于字符串末尾的 &gt 符号。我做错了什么?

功能:

function strip_arrows($text) {
                $text = preg_replace('#^<#', '', $text);
                $text = preg_replace('#^>#', '', $text);
                $text = preg_replace('#^&lt#', '', $text);
                $text = preg_replace('#^&gt#', '', $text);
                return $text;
            }

干杯!

【问题讨论】:

  • 您使用“字符串开头”锚点^。删除它。

标签: php regex preg-replace email-validation


【解决方案1】:

您没有使用标准的正则表达式语法。事实上,我认为这在任何地方都无效。 而且在这个例子中你真的不需要它。解码后只需修剪字符即可。

http://www.php.net/manual/en/function.html-entity-decode.php http://www.php.net/manual/en/function.trim.php

$text = trim(html_entity_decode($text), "< >");

【讨论】:

  • “你没有使用标准的正则表达式语法”为什么?
  • 我对 ^ 符号感到困惑。而且因为我做过很多 JS 编程,我什至不知道 PHP 可以使用除标准 / 之外的其他分隔符。我从未在任何标准 PCRE 规范中见过其他分隔符。
  • 使用 PHP,您可以使用几乎所有非字母或数字的 ascii 字符作为分隔符,甚至更傻(如|?+*)。您也可以使用括号:[regex](regex){regex}
  • 分隔符的使用来自 PHP 语法,但不是 PCRE 规范:pcre.org/pcre.txt。请注意,在 Javascript 中,您有两种可能的语法,一种带有分隔符,另一种没有。
  • 是的。在我看到你对这个问题的评论并重新阅读他的问题的那一刻,我意识到有些事情很可疑。这就是为什么我花了这么长时间才回复你的评论。我继续寻找 PHP 正则表达式风格中可接受的分隔符。在 JavaScript 中,我使用正则表达式文字只是因为我的 IDE 以不同于字符串的方式突出显示它们。
【解决方案2】:

@Casimir et Hippolyte 感谢您的回答!我删除了^ 符号,我不知道它是“字符串开头”锚。

最终固定代码:

function strip_arrows($text) {
                $text = preg_replace('#<#', '', $text);
                $text = preg_replace('#>#', '', $text);
                $text = preg_replace('#&lt#', '', $text);
                $text = preg_replace('#&gt#', '', $text);
                return $text;
}

【讨论】:

  • 为你高兴,但 AlexanderMP 方法比这里好得多。
  • 他的方法对我不起作用,我仍然留下了结束的 > 标志。
  • @SirCode-A-lot,很有趣。这不应该发生。实际上,Trim() 是旨在完全按照您想做的事情的功能。您的输入与描述不符,或者在复制代码行时出错。我强烈建议您尝试使 trim() 工作,这样您就可以了解它的功能并在以后每次需要从字符串的开头或结尾删除一些字符时使用它。尽管正则表达式有效,但它既是一种矫枉过正,也使代码中的意图更难阅读,同时使代码更大,更容易出现错误。
【解决方案3】:

一种快速的方法是使用strtr()(因为您要替换文字字符串,所以不需要使用正则表达式):

function strip_arrows($text) {
    $trans = array('<' => '', '>' => '', '&lt;' => '', '&gt;' => '');
    return strtr($text, $trans);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多