如何在字符串中检测其他语言(而非英语)的字母


How can I detect letters in other languages (not English) in the string?

这是我的代码:

function isValid($string) {
    return strlen($string) >= 6 &&
           strlen($string) <= 40 &&
           preg_match("/'d/", $string) &&
           preg_match("/[a-zA-Z]/", $string);
}
// Negative test cases
assert(!isValid("hello"));
// Positive test cases
assert(isValid("abcde2"));

正如您所看到的,我的脚本基于4个条件来验证一个字符串。现在我正在尝试开发这个:

preg_match("/[a-zA-Z]/", $string)

此条件仅针对英文字母返回true。我如何也可以添加其他字母,如ا ب ث چ。我该怎么做?

注意:这些字符不是阿拉伯语,而是波斯语。

要匹配英语或波斯语字母,可以使用

preg_match('/['x{0600}-'x{06FF}A-Z]/iu', $string)

'x{0600}-'x{06FF}范围应该与所有波斯字母匹配。A-Z范围将匹配所有ASCII字母(由于使用了不区分大小写的/i修饰符,因此大小写都匹配)。/u修饰符是必需的,因为您使用的是Unicode字符。

此外,在检查Unicode字符串长度时使用mb_strlen而不是strlen,它将正确计算Unicode代码点。

对于

您的密码应至少包含一个字母(该字母可以是任何语言

你需要使用

preg_match('/'p{L}/u', $string)

preg_match('/'p{L}'p{M}*+/u', $string)
             ^^^^^^^^^^^^

这将匹配任何字母(即使是后面有变音符号的字母)。'p{L}与任何基本Unicode字母匹配,'p{M}*+将与其后的0+变音符号相匹配。如果不使用匹配值,/'p{L}/u将足以进行检查。