使用perl使用正则表达式验证表单中的HTML字段

时间:2014-03-13 20:09:40

标签: regex perl validation

关于使用正则表达式来验证表单中的某些字段,我有几个简单的问题。但我似乎遇到了一些问题。

所以这是代码

$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。

提前感谢大家的帮助和见解。

干杯

1 个答案:

答案 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;
}