【问题标题】:How to check if a string contains ALL of required characters in php如何检查字符串是否包含php中所有必需的字符
【发布时间】:2017-10-02 15:55:35
【问题描述】:

我正在尝试检查一个字符串是否包含字母 A、B 和 C,而没有其他内容。有没有使用preg_match 的速记方法?

举一个我想要的例子,支票应该返回

ABC //TRUE
AABC //TRUE
ABBCC //TRUE
ABCD //FALSE

因此,字符串必须包含 ABC 至少一次,并且没有其他人物。

【问题讨论】:

  • CAB 呢?
  • CAB 没问题,顺序无所谓

标签: php


【解决方案1】:

要以任意顺序匹配 A、B 和 C,至少一次,你可以使用这个正则表达式:

/^(?=.*a)(?=.*b)(?=.*c)([a-c])+$/i

Demo

但是,我认为您可以在没有正则表达式的情况下实现这一点。创建一个函数,该函数将要检查的字符列表和字符串作为参数。对于每个字符,首先检查它是否包含在字符串中。如果不是,请返回false。如果它们都在那里,请将它们从字符串中删除。现在,如果字符串为空,则没有其他字符,因此可以返回true,否则返回false

<?php
function checkCharacters($list, $string) {
    foreach ($list as $letter) {
        if (stripos($string, $letter) === false) {
            return false;
        }
        $string = str_ireplace($letter, "", $string);
    }
    return empty($string);
}
$list = ["A", "B", "C"];
var_dump(checkCharacters($list, "ABC")).PHP_EOL; // true
var_dump(checkCharacters($list, "AABC")).PHP_EOL; // true
var_dump(checkCharacters($list, "ABBCC")).PHP_EOL; // true
var_dump(checkCharacters($list, "ABCD")).PHP_EOL; // false
var_dump(checkCharacters($list, "BAC")).PHP_EOL; // true
var_dump(checkCharacters($list, "ABACBCBACB")).PHP_EOL; // true
var_dump(checkCharacters($list, "AB")).PHP_EOL; // false
var_dump(checkCharacters($list, "AC")).PHP_EOL; // false
var_dump(checkCharacters($list, "A")).PHP_EOL; // false
var_dump(checkCharacters($list, "abc")).PHP_EOL; // true

这是为了以防万一,不区分大小写,因此它也接受abc

Demo

【讨论】:

    【解决方案2】:

    正如您所提到的,您可以使用 preg_match...

    if (!preg_match("/^[ABC]+$/",$yourtext)) {
       echo 'This string has other characters.';   
    } else {
       echo 'This string only has A,B and C.';
    }
    

    希望对你有帮助

    【讨论】:

      【解决方案3】:
      <?php
      function str_alphabet($string, array $alphabet) {
          $counts = array_count_values(str_split($string));
      
          sort($alphabet);
          ksort($counts);
      
          return array_keys($counts) === $alphabet;
      }
      

      如果$string 包含所提供的$alphabet 数组的每个字母至少一次,并且没有其他字符,这将返回true。

      示例用法:

      str_alphabet('ABACBABCABCABCA', ['A', 'B', 'C']); // true
      str_alphabet('ABCD', ['A', 'B', 'C']); // false
      

      【讨论】:

        猜你喜欢
        • 2012-06-23
        • 1970-01-01
        • 2016-02-24
        • 2019-06-07
        • 1970-01-01
        • 1970-01-01
        • 2017-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多