preg_replace不会剥离输入

时间:2018-12-07 17:26:59

标签: php preg-replace

我试图使其在按下“提交”按钮的位置,并且所有输入仅保留字母和数字,然后回显到页面上。我没有收到任何错误,但仍不会打印出格式化的文本。我可以回显3行命令,但是将其转换为输入时会迷路。

有人可以帮助我让代码按照我想要的方式运行吗?我不是要清理数据或将其插入数据库。我只是试图将由于手指发胖,醉酒或其他任何原因而无法读取的单词删除到页面上

我尝试过

preg_replace('/^[a-zA-Z0-9]+/', $name)
preg_replace('/^[a-zA-Z0-9]+/', $_POST["name"])
<html>
<head>
<title>test</title>
</head>
<body>
<form id="form" class="appnitro"  method="post" action="">
<h2>stripping extra crap</h2>               
<div>
<br>

name<br>
<input id="element_1" name="name" type="text" maxlength="20" value="test$%+=-?"/> <br>
test1<br>
<input id="element_1" name="test1" type="text" maxlength="20" value="test$%+=-?"/> <br>
test2<br>
<input id="element_1" name="test2" type="text" maxlength="20" value="test$%+=-?"/> <br>
test3<br>
<input id="element_1" name="test3" type="text" maxlength="20" value="test$%+=-?"/> <br>
</div>  
<input id="" class="button_text" type="submit" name="" value="Submit" />
</form> 
</div>
</body>
</html>


<?php

if (empty($name) && empty($test1) && empty($test2) && empty($test3)) {
    echo 'Please fill in the fields';
    return false;

}


if (isset($_POST['submit'])){


    implode("", $_POST);

    preg_replace('/^[a-zA-Z0-9]+/', $_POST);//testing string to replace $name to letters and numbers only


}
echo 'name with only letters and numbers?<br>';                    
echo $name;
 echo '<br>'; 
  echo '<br>'; 
echo 'is post array still an array or string after implode?<br>';                    
echo $_POST;
echo '<br>'; 
 echo '<br>'; 
echo 'test1 with only letters and numbers?<br>';                 
echo $test1;
echo '<br>';  

?>
--------------------------------
<?php
foreach($_POST as $key=>$value)
{
  echo "<br>$key=$value<br>";
}

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);


?>

1 个答案:

答案 0 :(得分:0)

'preg_replace'需要3个参数(请参见documentation)。

因此,您的情况应该是:$newName = preg_replace('/[^a-zA-Z0-9]+/', '', $name);

此外,我移动了'^',因为:

  • 原来的位置,意思是“在文本开头匹配此正则表达式”。

  • 在新位置上,表示“除了[a-zA-Z0-9]以外的任何东西”

因此,该函数现在将所有非字母字符替换为空(您可以阅读Regex not operator上JohanSjöberg的答案以获取更多信息)。