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

Regex 使用perl使用正则表达式验证表单中的HTML字段,regex,perl,validation,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, $ema

我有几个关于使用正则表达式验证表单中某些字段的快速问题。但我似乎有一些问题

这是代码

$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;
    }
}
}
$userNameReg=“[a-zA-Z0-9_200;]+”;
$passwordReg=“([a-zA-Z]*)([a-Z]+)([0-9]+)”;
$emailReg=“[a-zA-Z0-9\]@[a-zA-Z]\.[a-zA-Z]{2,3}”;
如果($onLoad!=1)
{
@controlValue=($userName、$password、$phoneNumber、$email);
@regex=($userNameReg、$passwordReg、$phoneNumber、$emailReg);
@验证;

对于($i=0;$i我猜您缺少开始/结束锚点。因此
[a-zA-Z0-9\]+
应该是
^[a-zA-Z0-9\]+$
。这样模式将只匹配完整字符串

另外,我强烈建议您启用
使用strict;
。这样可以避免许多错误键入。只需在脚本开头添加以下内容:

use strict;
use warnings;
这将迫使perl只允许定义的变量。在大多数情况下,您需要在第一次使用变量时添加
my
(例如
my$ctrlVal

validateControl
中,您不需要第二个
if
语句。您可以像这样返回false:

sub validatecontrols  
{       
    my $ctrlVal = shift();
    my $regexVal = shift();
    if ($ctrlVal =~ /$regexVal/)
    {
        return 1;
    }
    return 0;
}

你不应该尝试为电子邮件地址验证之类的事情创建自己的正则表达式;众所周知,这些正则表达式很难正确使用。使用这样的模块。讲师希望我们创建自己的正则表达式,作为任务的一部分。你需要在电子邮件正则表达式
[a-zA-Z0-9\]+@[a-zA-Z]+\[a-zA-Z]+\[a-zA-Z]{2,3}中创建几个
+/code>
您的密码是aB1、aaBB11等形式的受限密码。aAa1不起作用,Aa1I也不起作用。我不认为您的正则表达式会按照您期望的方式运行。您不需要参数,您可以在密码中显示数字和大写字母的位置排序,我认为这不是您想要的。或者干脆
返回($ctrlVal=~/$regexVal/);