关于使用正则表达式来验证表单中的某些字段,我有几个简单的问题。但我似乎遇到了一些问题。
所以这是代码
$userNameReg = "[a-zA-Z0-9_]+";
$passwordReg = "([a-zA-Z]*)([A-Z]+)([0-9]+)";
$emailReg = "[a-zA-Z0-9_]@[a-zA-Z]\.[a-zA-Z]{2,3}";
if ($onLoad !=1)
{
@controlValue = ($userName, $password, $phoneNumber, $email);
@regex = ($userNameReg, $passwordReg, "phoneNumber", $emailReg);
@validated;
for ($i=0; $i<4; $i++)
{
$retVal= validatecontrols ($controlValue[$i], $regex[$i]);
if ($retVal)
{
$count++;
}
if (!$retVal)
{
$validated[$i]="*"
}
}
sub validatecontrols
{
$ctrlVal = shift();
$regexVal = shift();
if ($ctrlVal =~ /$regexVal/)
{
return 1;
}
if ($ctrlVal !~ /$regexVal/)
{
return 0;
}
}
}
所以会发生什么,它仍然验证特殊字符,我不明白为什么。如果我输入一个特殊字符,它会抛出一个标志,但如果它在中间,开头或结尾的单词部分验证它。
另外请忽略电话号码部分,因为我尚未获得该部分。我仍然需要创建一个正则表达式来验证电话号码,仅限数字,第一个数字大于2。
提前感谢大家的帮助和见解。
干杯
答案 0 :(得分:1)
我的猜测是你错过了开始/结束锚点。因此[a-zA-Z0-9_]+
应为^[a-zA-Z0-9_]+$
。这种模式只匹配完整的字符串。
另外,我强烈建议您启用use strict;
。它可以帮助您避免许多错误的错误。只需将以下内容添加到脚本的开头:
use strict;
use warnings;
这将强制perl仅允许定义的变量。在大多数情况下,您需要在首次使用变量时添加my
(例如my $ctrlVal
)。
在validatecontrols
中,您不需要第二次if
声明。您可以像这样返回false:
sub validatecontrols
{
my $ctrlVal = shift();
my $regexVal = shift();
if ($ctrlVal =~ /$regexVal/)
{
return 1;
}
return 0;
}