奇怪的正则表达式行为解析特殊字符

时间:2012-06-18 12:39:25

标签: php regex

我有一个php脚本验证,它会查找一些特殊字符并删除它们。该脚本工作正常,但如果我在两个$之间放置任何东西,它也会被删除。所以,如果放入

Supercool$$$$%%email%%@%SP***AM.com; => Supercoolemail@SPAM.com

但如果我输入

Supercool$$email$$%%@%SP**AM.com => Supercool@SPAM.com

每当我在$'之间放置常规字符时,它们也会被删除。这是我用来检查输入电子邮件中的特殊字符的PHP脚本:

<?php

$bademail = "MAXCOOL$$ES$$%%T%%@%SP***AM.com";

function specialcharsreg ($email){
    $regex = "/[*?$!%$&#]/";
    $validemail = preg_replace($regex, "", $email);
    echo "\n=====================================\n".$email." -> ".$validemail."\n=====================================\n\n";
}
specialcharsreg($bademail);
?>

1 个答案:

答案 0 :(得分:3)

表达式不会取代它。

您只是没有正确引用字符串,而$variable正在进行插值。

你的(双引号):

$bademail = "MAXCOOL$$ES$$%%T%%@%SP***AM.com";

应该是(使用单个引号时不插入变量):

$bademail = 'MAXCOOL$$ES$$%%T%%@%SP***AM.com';

或者你可以使用反斜杠转义$

$bademail = "MAXCOOL\$\$ES\$\$%%T%%@%SP***AM.com";