2011-05-03 88 views
3

这些函数在类文件中,它们通过表单传递变量。 为什么它会说不匹配,如果我只传递一个字符串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'; 
    } 

} 
+0

你试图检查的字符串是什么? – 2011-05-03 11:08:40

+0

只是一个纯ASCII字符的文本输入字符串。 – Aaron 2011-05-03 11:09:32

+0

@Matthew,*精确*字符串将是方便的,只是为了澄清事情。 – 2011-05-03 11:10:09

回答

3

你目前试图验证的唯一的事情是,你的字符串中的第一个字符是一个字母。没有更多,没有更多。

如果你想检查只是字母的完整字符串,你将不得不使用像'#^[a-zA-Z]+$#'这样的正则表达式。这可以确保,允许有多个字母。你也必须注意测试字符串的编码。如果字符串是utf8,则必须使用u修饰符与您的正则表达式相似,如#^[a-zA-Z]+#u

+0

实际上,只有当_pattern_包含unicode而不是目标字符串时,才需要u''修饰符。 – ridgerunner 2011-05-03 14:11:13

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) { 
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 
+0

阅读我看到的问题'这些函数在类文件中,然后他仍然不会得到结果,只有错误。 – 2011-05-03 11:25:28

0

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

[AZ] * [az] {1,50}将与任何以大写字母开头的单词匹配为真,紧跟在小写字母之后1到50个字符之间的字母。

相关问题