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

7hiiyaii  于 2023-02-07  发布在  PHP
关注(0)|答案(3)|浏览(229)

在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);
    }
 ?>

这显然是行不通的,我不知道如何做到这一点没有正则表达式。

7qhs6swi

7qhs6swi1#

在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]"返回[]

wmomyfyw

wmomyfyw2#

为什么不试试str_replace。

<?php    

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

?>

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

2hh7jdfx

2hh7jdfx3#

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

$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);
}

相关问题