PHP - 检查字符串中是否包含非法字符

时间:2014-11-29 11:32:44

标签: php string

在JS中你可以这样做:

 var chs = "[](){}";
 var str = "hello[asd]}";
 if (str.indexOf(chs) != -1) {
    alert("The string can't contain the following characters: " + chs.split("").join(", "));
 }

如何在PHP中执行此操作(用echo替换alert)?

我不想使用正则表达式来简化我的想法。

编辑:

我尝试了什么:

 <?php
    $chs = /[\[\]\(\)\{\}]/;
    $str = "hella[asd]}";
    if (preg_match(chs, str)) {
       echo ("The string can't contain the following characters: " . $chs);
    }
 ?>

这显然不起作用,并且如果没有正则表达式就不知道怎么做。

3 个答案:

答案 0 :(得分:0)

在php中你应该这样做:

$string = "Sometring[inside]";

if(preg_match("/(?:\[|\]|\(|\)|\{|\})+/", $string) === FALSE)
{
     echo "it does not contain.";
}
else
{
     echo "it contains";
]

正则表达式说检查字符串中是否有任何字符。你可以在这里阅读更多相关信息:

http://en.wikipedia.org/wiki/Regular_expression

关于PHP preg_match():

http://php.net/manual/en/function.preg-match.php

<强>更新

我为此写了一个更新的正则表达式,它捕获了里面的字母:

$rule = "/(?:(?:\[([\s\da-zA-Z]+)\])|\{([\d\sa-zA-Z]+)\})|\(([\d\sa-zA-Z]+)\)+/"
$matches = array();
if(preg_match($rule, $string, $matches) === true)
{
   echo "It contains: " . $matches[0];
}

它回归这样的事情:

It contains: [inside]

我已经改变了正则表达式:

$rule = "/(?:(?:(\[)(?:[\s\da-zA-Z]+)(\]))|(\{)(?:[\d\sa-zA-Z]+)(\}))|(\()(?:[\d\sa-zA-Z]+)(\))+/";

//它返回一个发生的非法字符数组

现在为此[]

返回"I am [good]"

答案 1 :(得分:0)

为什么不试试str_replace。

<?php    

$search  = array('[',']','{','}','(',')');
    $replace = array('');
    $content = 'hella[asd]}';
    echo str_replace($search, $replace, $content);
 //Output => hellaasd

?>

在这种情况下,我们可以使用字符串替换而不是正则表达式。

答案 2 :(得分:0)

这是一个不使用正则表达式的简单解决方案:

$chs = array("[", "]", "(", ")", "{", "}");
$string = "hello[asd]}";
$err = array();

foreach($chs AS $key => $val)
{
    if(strpos($string, $val) !== false) $err[]= $val; 
}

if(count($err) > 0)
{
    echo "The string can't contain the following characters: " . implode(", ", $err);
}