请参阅下面的注册表:
$teststring="αβγδεζηθΙκΛμ";
if(!preg_match("/^[A-ZA-zΑ-Ωα-ωίϊΐόάέύϋΰήώ0-9\- ]+$/", $teststring))
{
echo "invalid char";
}
else
{
echo "success";
}
由于
答案 0 :(得分:2)
你有几个重叠的字符范围,看起来你正试图测试整个字符串,以确保它不只匹配那些字符?你会以这种方式得到很多假阴性。如果您在成功的preg_match
上返回“成功”,这可能会有效,但仍然是一种倒退的方式。
此外,如果要匹配unicode字符,则需要/u
修饰符才能将字符串视为UTF-16
。如果您愿意,也可以使用Unicode range or block代替广泛的范围;你还需要/u
。
工作表达式,如果字符串的所有字符仅在该范围内,则该字符串将有效:
<?php
$teststring="ΑαβγδεζηθΙκΛμ";
if(preg_match("/^[A-Za-z0-9α-ωΑ-Ω ίϊΐόάέύϋΰήώ-]+$/u", $teststring))
// ^ note the unescaped hyphen is an
// actual hyphen not a char range
{
echo "success";
}
else
{
echo "invalid char";
}
?>
您还会注意到,如果您在没有/u
修饰符的情况下进行尝试,则会收到以下错误:
Warning: preg_match(): Compilation failed: range out of order in character class at offset {line_num}
答案 1 :(得分:1)
请记住使用分号:
<?php
$teststring="αβγδεζηθΙκΛμ";
if (!preg_match("/^[A-ZA-zΑ-Ωα-ωίϊΐόάέύϋΰήώ0-9\- ]+$/", $teststring)) {
echo "invalid char"; # Semicolon was missing from here
}
else {
echo "success"; # Semicolon was missing from here
}