在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);
}
?>
这显然不起作用,并且如果没有正则表达式就不知道怎么做。
答案 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);
}