在数字字符串中搜索字母字符时,preg_match返回1

时间:2012-11-15 08:06:16

标签: php regex preg-match

我有以下代码片段,我不知道为什么这样的正则表达式匹配:

<?php

$string = "0123456789";

if(preg_match('/[a-zA-Z]*/', $string) === 1) {
    echo "match";

}

else {
    echo "not match";

}

?>

运行脚本时,它总是返回“匹配”。我希望它打印出“不匹配”,因为$ string变量中没有字母字符。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

if(preg_match('/[a-zA-Z]/', $string) === 1) {
    echo "match";
}
else {
    echo "not match";

*表示0或更多,因此它匹配字符串开头的0个字母。你想匹配1,所以摆脱*

答案 1 :(得分:2)

匹配,因为您使用*量词。如果使用:

,则不匹配
/[a-zA-Z]+/

这是因为/[a-zA-Z]*/也会匹配0次出现。

答案 2 :(得分:1)

试试这个

/^[A-z]+$/

[A-z]将匹配所有字母(小写和大写)。

^和$将确保除了这些字母表之外什么都不匹配。