[英]PHP - How to write a regex to check that a string only contains certain characters?
[英]How to check if a string contains ALL of required characters in php
我正在嘗試檢查字符串是否包含字母A,B和C,並且沒有其他內容。 有沒有使用preg_match
做到這一點的preg_match
?
舉一個我想要的例子,支票應該返回
ABC //TRUE
AABC //TRUE
ABBCC //TRUE
ABCD //FALSE
因此,字符串必須至少包含A , B和C一次,並且不得包含其他字符。
要以任意順序至少一次匹配A,B和C,可以使用以下正則表達式:
/^(?=.*a)(?=.*b)(?=.*c)([a-c])+$/i
但是,我認為無需正則表達式就可以實現這一目標。 制作一個函數,該函數將要檢查的字符列表和一個字符串作為參數。 對於每個字符,首先檢查它是否包含在字符串中。 如果不是,則返回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
以防萬一,這是不區分大小寫的,因此它也將接受a
, b
和c
。
如您所述,您可以使用preg_match
...
if (!preg_match("/^[ABC]+$/",$yourtext)) {
echo 'This string has other characters.';
} else {
echo 'This string only has A,B and C.';
}
希望對您有所幫助
<?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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.