2014-09-26 61 views
0

我把一个正则表达式来替换任何不是:我在做什么毛病我的PHP正则表达式

  1. 美国一个字母不区分大小写
  2. 一些
  3. 一段
  4. 一个空白
  5. 逗号
  6. 问号
  7. 的exclam通货膨胀标记
  8. 一个美元符号

正则表达式:/[^0-9a-zA-Z\$\s\.\,\?\!\$]+/m

我放在一起的正则表达式,因此它可以取代所有不想要的字符,并比较结果字符串的一部开拓创新的字符串。正则表达式仅在输入法是文本输入时才起作用,当它是文本区时,它将替换所有的返回和制表符和空格。我究竟做错了什么?

<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>"; 
} 
?> 

回答

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>"; 
} 
?>