这是我的代码:
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
。我怎样才能添加其他字母ا ب ث چ
。那我该怎么办呢?
注意:这些字符不是阿拉伯语,而是波斯语。
答案 0 :(得分:1)
要匹配英文或波斯文字,您可以使用
preg_match('/[\x{0600}-\x{06FF}A-Z]/iu', $string)
\x{0600}-\x{06FF}
范围是supposed to match all Persian letters。 A-Z
范围将匹配所有ASCII字母(因为使用了/i
不区分大小写的修饰符,所以大写字母都是小写字母)。由于您使用的是Unicode字符,因此/u
修饰符是必需的。
此外,在检查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
就足以进行检查。