gpt4 book ai didi

regex - perl 中的 4 位数字验证

转载 作者:行者123 更新时间:2023-12-04 16:45:55 26 4
gpt4 key购买 nike

当我将命令行参数传递给 perl 程序时,我进行了验证检查。我传递了两年,第一个传递的参数应该小于第二个传递的参数,两个参数都应该只是数字,而且它们应该正好是 4 .

#Sunny>perl check.pl 2007 2008 这个不错

#Sunny>perl check.pl 2008 2007 这很糟糕

#Sunny>perl check.pl 200 2007 这很糟糕

我已经为此编写了代码,但无法弄清楚为什么它不起作用。

#!usr/bin/perl
#check.pl

if ($#ARGV < 0) { }
else
{
$fiscyear1 = $ARGV[0];
$fiscyear2 = $ARGV[1];
}

if (($fiscyear1 !~ m/\d{4}/) and ($fiscyear2 !~ m/\d{4}/) and ($fiscyear1 < $fiscyear2))
{ print "Bad parameters\n"; }
else
{ print "good parameters\n"; }

最佳答案

这听起来像是一个糟糕的过度思考的例子......

您想要的是验证参数是两年,格式为 YYYY,并且第二年在第一年之后。

好吧,9999 可以通过任何数字检查,但它几乎不是有效年份。与 0101 或 3021 等相同。

你想要的是设置一个给定的范围,并确保参数是数字。

use strict;
use warnings;

my $yr1 = shift;
my $yr2 = shift || usage();

usage() unless $yr1 =~ /^\d+$/;
usage() unless $yr2 =~ /^\d+$/;

my $min_year = 1900;
my $max_year = 2200;

if ( ($yr1 < $min_year) or ($yr1 > $max_year) ) {
die "Invalid year: $yr1";
}
if ( ($yr2 < $min_year) or ($yr2 > $max_year) ) {
die "Invalid year: $yr2";
}
if ( $yr1 >= $yr2 ) {
die "Invalid sequence: $yr2 is not greater than $yr1";
}

sub usage {
die "Usage script.pl <year1> <year2>";
}

关于regex - perl 中的 4 位数字验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6697023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com