检查字符串中是否存在两个来自数组的char(一起)

时间:2016-12-14 06:36:14

标签: php arrays

我有一个字符数组 -

$operators = array('%', '*', '+', '-', '@');

和例如 -

的字符串
$text = '%@';

如何在串联中找到字符串中是否包含两个值 -

$text = %test% - 有效,但$text = %+test失败($concat = TRUE)。

这就是我尝试过的 -

$concat = FALSE;
foreach ($operators as $op) {
  $opPosition[$op] = strpos($text, $op);
  // Here I need to check if any two values of
  // $opPosition are neighbours, set the $concat variable to TRUE.
}

如何检查$opPosition或者这是我正在尝试的唯一方式?

2 个答案:

答案 0 :(得分:1)

您可以使用下面的preg_match

// $concat will be 1 for any match
$concat = preg_match("/[%\*\+\-@]{2,}/", $text);

您可以找到正则表达式here

的说明

注意:即使发生某些错误,$concat也将为0。您可能需要使用==运算符。

编辑:如果您的运算符在数组中,或者需要灵活地添加,更改或删除运算符而不会干扰正则表达式,则可以使用以下代码。

$text = "test%+";
$operators = array('%', '*', '+', '-', '@');
// create regular expression by imploding the array to string and using
// preg_quote to Quote regular expression characters
$expression = preg_quote(implode('', $operators), '/');
$concat = preg_match("/[$expression]{2,}/", $text);

preg_quote

的参考

演示here

答案 1 :(得分:0)

尝试使用此代码部分获取所需的输出 -

$operators = array('%', '*', '+', '-', '@');
$text = '%test%';
$end = substr($text,-1);
$start = substr($text, 0,1);
if(($start == $end) && in_array($start, $operators) == 1){
  echo "valid";
}else{
  echo "Not Valid";
}