这些函数位于类文件中,它们通过表单传递变量。 如果我传给一个只包含字符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 :(得分: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个字符之间。