字母表中的每个字母至少有一次字符串吗?

Anc*_*end 7 php regex

想知道是否有更有效的方法来检测字符串是否包含使用正则表达式一次或多次字母表中的每个字母?

我很感激任何建议

$str = str_split(strtolower('We promptly judged antique ivory buckles for the next prize'));

$az = str_split('abcdefghijklmnopqrstuvwxyz');

$count = 0;
foreach($az as $alph) {
    foreach($str as $z) {
        if($alph == $z) {
           $count++;
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 5

只需使用array_diff:

count(array_diff($az, $str)) > 0;
Run Code Online (Sandbox Code Playgroud)


Cas*_*yte 3

使用正则表达式,你可以做到这一点,但它不是最佳的,也不是很快的,@hjpotter 方式,如果从快得多:

var_dump(strlen(preg_replace('~[^a-z]|(.)(?=.*\1)~i', '', $str)) == 26);
Run Code Online (Sandbox Code Playgroud)

它删除所有非字母字符、所有重复字母(不区分大小写),并将字符串长度与 26 进行比较。

  • [^a-z]匹配任何非字母字符
  • (.)捕获第 1 组中的一个字母
  • (?=.*\1)检查相同的字母是否在其他地方(在右侧)
  • i 修饰符使模式不区分大小写