文字列が2つ以上の単語を含み、各単語が2つ以上の文字を持っていることを検出/検証する関数を作成したい(2つの文字を除いて、{数字なし}の他の文字を含めることができますが、私はしませんどれといくつか気になります)。
現在、これに正規表現を使用する必要があるのか、それとも他の方法で使用できるのかわかりません。
正規表現を作成する必要がある場合、利用可能なすべての文字を確認する必要があるため、その方法もわかりません。
これは私が今得た正規表現であり[A-Za-z]{2,}(\s[A-Za-z]{2,})
、少なくとも各単語で2つの単語と2つの文字を検証します。
編集:kr-jp-cn言語は他の言語とは動作が異なるため、再考した後、ほとんどの言語をサポートすることにしました。私の主なルールでは、kr-jp-cnの文字は文字としてではなく、文字としてカウントされます。
EDIT2:
これは、@messageanswerに基づいて使用している関数です。
function validateName($name)
{
if (strcspn($name, '0123456789') == strlen($name)) //return the part of the string that dont contain numbers and check if equal to it length - if it equal than there are no digits - 80% faster than regex.
{
$parts = array_filter(explode(' ',$name)); //should be faster than regex which replace multiple spaces by single one and then explodes.
$partsCount = count($parts);
if ($partsCount >= 2)
{
$counter = 0;
foreach ($parts as $part)
{
preg_match_all('/\pL/u', $part, $matches);
if (count($matches[0]) >= 2)
{
$counter++;
}
}
}
if ($counter == $partsCount)
{
return 'matches';
}
}
return 'doesnt match';
}
助けてくれてありがとう。