首页 > 解决方案 > 如何验证用户输入中的 Perl 正则表达式?

问题描述

我从假设有效的 perl 正则表达式值的用户那里得到一个输入列表。示例可能是:

有没有一种安全的方法来验证这些字符串?

标签: regexperl

解决方案


首先,考虑您想让用户对模式进行多少操作。Perl 正则表达式可以运行任意代码。

但是,要验证您可以将字符串用作模式而不会导致致命错误,您可以使用qr//运算符编译字符串并返回正则表达式。如果有问题,qr会给你一个致命的错误,你可以用它来捕捉eval

my $pattern = eval { qr/$input/ };

如果您返回undef,则该模式无效。而且,尽管问题中有评论,但仍有无数种方法可以制作无效模式。我知道,因为我一直手动输入它们,而且我还没有用尽办法搞砸:)

这不会将模式应用于字符串,但您可以使用它$pattern来进行匹配:

if( $pattern ) {
    $target =~ $pattern;  # or $target =~ m/$pattern/
    }

推荐阅读