簡體   English   中英

如何檢查字符串是否包含存儲在數組中的字符,但是如果字符串包含不在數組中的任何字符,則返回false

[英]How can I check if a string contains characters stored in an array but return false if it contains any characters not in the array

基本上,例如,我根據一天的初始化來檢查從數組到字符串的星期幾:

<?php
$check_days = array("M", "T");
$days1 = "MTW";
$days2 = "M";
[insert code to compare $check_days to $days1 and $days2 so that $days1 returns FALSE while $days2 returns TRUE]
?>

嘗試使用正則表達式字符類並內

if (preg_match('/^['.implode($check_days).']+$/', $days1)) {
    // do some stuff
}

編輯:讓我來幫助解釋一下這是怎么回事:

implode($check_days)

它將數組的所有元素組合成一個字符串。 您的情況是“ MT”。

preg_match('/^[MT]+$/', $days1);

這是一個正則表達式 ,用於檢查在“開始”( ^ )之后, $days1包含“ M”或“ T”( [MT] ),重復一次或多次( + ),然后字符串結束( $ )。 如果是這種情況,它將返回true。

希望能有所幫助。

嘗試這個:

function checkDays($testFor, $inString){
  $a = str_split($inString); $d = array();
  foreach($a as $v){
    if(!in_array($testFor, $v) || in_array($d, $v)){
      return false;
    }
    $d[] = $v;
  }
  return true;
}
$check_days = array('M', 'T');
echo checkDays($check_days, 'MTW');
echo checkDays($checkdays, 'M');

抱歉,我讀錯了您的問題,所以我的回答也錯了。 我會采用wavemode的解決方案。

原始答案

如果我正確理解您的要求, check_days確保check_days所有天check_days必須存在於要測試的變量中。 如果我是正確的,則此功能將起作用:

function checkDays($haystack, $validator) {
    $ok = true;
    foreach ($validator as $day) {
        $ok = (strpos($haystack, $day) !== false) && $ok;
    }
    return $ok;
}

在此信息中查看實際操作: http ://phiddle.net/6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM