为什么这个字符串验证脚本不起作用?

时间:2011-05-03 11:05:25

标签: php regex oop

这些函数位于类文件中,它们通过表单传递变量。 如果我传给一个只包含字符a-z或A-Z的字符串,为什么会说不匹配?

function pattern_check($patten, $string) {
$pass = preg_match($patten, $string);
return $pass;
}
function check_name($name) {
    $pat = '/^[a-zA-Z]/';
    $name = $this->pattern_check($pat, $name);
    if($name) {
        echo "Match";
    }
    else {
        echo 'No match';
    }

}

4 个答案:

答案 0 :(得分:3)

您目前唯一要验证的是,字符串中的第一个字符是一个字母。没什么,没什么。

如果您只想检查完整字符串是否为字母,则必须使用'#^[a-zA-Z]+$#'等正则表达式。这确保了允许多个字母。此外,您还必须注意测试字符串的编码。如果字符串为utf8,则必须将u修饰符与#^[a-zA-Z]+#u

等正则表达式一起使用

答案 1 :(得分:2)

这似乎完全按照您的指定工作。它检查字符串字母字符开头。你的字符串不能是你想象的那样。

我将它包装在一个测试函数中,然后输入一些字符串:

function test($name)
{
    echo "${name}: ";
    check_name($name);
    echo "\n";
}

test(" ZZ1");
test("123");
test("4aa");
test("AAA");
test("Z11");
test("ZZ ");
test("ZZZ");
test("aaa");
test("zzz");
test("Ábc");

...输出

% ./test.php    

 ZZ1: No match
123: No match
4aa: No match
AAA: Match
Z11: Match
ZZ : Match
ZZZ: Match
aaa: Match
zzz: Match
Ábc: No match

% php --version
PHP 5.3.4 (cli) (built: Dec 15 2010 12:15:07) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

重复使用$name变量可能会造成混淆:

$name = $this->pattern_check($pat, $name);
if($name) {

请考虑改用:

$matched = $this->pattern_check($pat, $name);
if ($matched) {

答案 2 :(得分:1)

如果这些函数不是php类的一部分..那么错误就在你的行中

$name = $this->pattern_check($pat, $name);

将其更改为

$name = pattern_check($pat, $name);

让我知道它是否有效?

更新 - 抱歉然后..因为我刚刚测试了它,它似乎工作

class mytest{


    private function pattern_check($patten, $string) {
        $pass = preg_match($patten, $string);
        return $pass;
    }
    public function check_name($name) {
        $pat = '/^[a-zA-Z]/';
        $name = $this->pattern_check($pat, $name);
        if($name) {
            echo "Match";
        }
        else {
            echo 'No match';
        }

    }

}
$obj = new mytest();
$obj->check_name('ABCDEFG');
OUTPUT -> Match

答案 3 :(得分:0)

我已经意识到正则表达式不正确,检查正确名称的正确模式是确保它在所述资本之后用小写字母大写,所以,

[A-Z] * [a-z] {1,50}与任何以大写字母开头的单词匹配为true,紧跟在大写字母后面,小写字母在1到50个字符之间。