我的php正则表达式我做错了什么

时间:2014-09-26 02:57:42

标签: php regex

我整理了一个正则表达式来替换任何不是的东西:

  1. 美国字母表的一封信,不论大写字母
  2. 一个数字
  3. 一段时间
  4. 一个空白
  5. 逗号
  6. 问题马克
  7. 感叹号
  8. 一个美元符号
  9. 正则表达式:/[^0-9a-zA-Z\$\s\.\,\?\!\$]+/m

    我将正则表达式放在一起,以便它可以替换所有不需要的字符,并将结果字符串与其原始字符串进行比较。正则表达式仅在输入方法是文本输入时才有效,当它是textarea时,它会替换所有返回和制表符和空格。我做错了什么?

    <form method="get" action="" style="border-bottom:solid 1px lightGrey;">
    string:<br>
    <textarea name="a"><?php $av=(isset($_GET))?$_GET['a']:""; echo $av; ?></textarea><br><br>
    regex:<br>
    <input type="text" name="b" value="<?php $bv=(isset($_GET))?$_GET['b']:""; echo $bv; ?>" /><br><br>
    <input type='submit' value='done'/>
    </form>
    <?
    if(isset($_GET)){
    $count = null;
    $returnValue = preg_replace($_GET["b"], '*', $_GET["a"], -1, $count);
    echo "original string:<br>".$_GET['a']."<br><br>replacement string:<br>".$returnValue."<br><br>";
    }
    ?>
    

1 个答案:

答案 0 :(得分:0)

从我的测试中,magic quotes搞砸了输入。我可以解决它在脚本开头修复输入:

<?php
if(isset($_GET['a'])){
    $_GET['a'] = stripslashes($_GET['a']);
    $_GET['b'] = stripslashes($_GET['b']);
}
?>

PhpFiddle

的工作代码
<?php
if(isset($_GET['a'])){
    $_GET['a'] = stripslashes($_GET['a']);
    $_GET['b'] = stripslashes($_GET['b']);
}
?>

<form method="get" action="" style="border-bottom:solid 1px lightGrey;">
string:<br>
<textarea name="a"><?php $av=(isset($_GET["b"]))?$_GET['a']:""; echo $av; ?></textarea><br><br>
regex:<br>
<input type="text" name="b" value="<?php $bv=(isset($_GET["b"]))?$_GET['b']:"/[^0-9a-zA-Z\\$\\s\\.\\,\\?\\!\\$]+/m"; echo $bv; ?>" /><br><br>
<input type='submit' value='done'/>
</form>

<?php
if(isset($_GET["b"])){
$count = null;
$returnValue = preg_replace($_GET["b"], '*', $_GET["a"], -1, $count);
    echo "original string:<br><pre>".$_GET['a']."</pre><br><br>replacement string:<br><pre>".$returnValue."</pre><br><br>";
}
?>