有没有更好的方法在Perl中进行数据验证而不是正则表达式?
我有使用复杂正则表达式进行字符串和数字数据验证的Perl代码,这使得代码难以阅读和遵循,适用于所有人。
答案 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)
可能有。
有时正则表达式是最佳方法,有时则不是。你必须根据具体情况进行检查。