有没有更好的方法在Perl中进行数据验证而不是正则表达式?

时间:2009-07-30 12:33:03

标签: regex perl validation

有没有更好的方法在Perl中进行数据验证而不是正则表达式?

我有使用复杂正则表达式进行字符串和数字数据验证的Perl代码,这使得代码难以阅读和遵循,适用于所有人。

7 个答案:

答案 0 :(得分:8)

常见的错误是将所有要求塞入单个正则表达式中。这是第一次使用,但通常你会得到一个正常的表达,在接下来的两个星期里没人能理解。

不要那样做。每个要求使用一个正则表达式。

答案 1 :(得分:7)

perl中有一个非常棒的参数验证模块:Params::Validate

它可以让您以干净,漂亮的方式检查参数。从我们发现它的那一刻起,我们就到处使用它。

答案 2 :(得分:6)

不要重新发明轮子。使用Regexp::Common中的CPAN

#!/usr/bin/perl

use strict;
use warnings;

use Regexp::Common qw(number);

my $val = '500.345';

print "Good float\n" if $val =~ /^$RE{num}{real}$/;

CPAN是你的朋友。

答案 3 :(得分:1)

有一些方法可以在没有正则表达式的情况下进行验证。 - 使用正则表达式并不意味着您无法使其可读。

有(通常没有使用)// x标志到regexps,这让你可以用注释构建非常可读的regexp。

当然,这并不意味着您应该使用regexp验证所有内容 - 即使在技术上可行 - 它通常也是疯狂的(想想4KB长的regexp用于电子邮件地址验证)。

答案 4 :(得分:1)

验证数据的方式取决于您尝试执行的操作。如果数据只需要看起来像某种模式,那就是正则表达式领域。如果数据必须是枚举中的精确值,则散列更好。如果数字必须在一个范围内,则数字比较是您应该使用的工具。

一般来说,这类问题的答案是“可能”。

答案 5 :(得分:0)

如果你想确保变量值适合某种模式,没有比使用Perl的模式匹配工具更好的方法了。

另一方面,如果您想改进特定模式,可以在此征求意见。

您可以通过抽象出这些正则表达式并使用Regexp::Common等设施来使您自己的程序更容易理解。

答案 6 :(得分:0)

可能有。

有时正则表达式是最佳方法,有时则不是。你必须根据具体情况进行检查。