2009-07-30 2 views

答えて

6

ホイールを改造しないでください。 CPANからRegexp::Commonを使用します。

#!/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はあなたの友達です。

+1

パターンを固定する必要があります。 –

+0

もしperlが強力な型付けをしていたら、それを検証する必要はありません...正しい? –

+0

@ not-exactly-a-unixhater:CPANでVariable :: Strongly :: TypedまたはLexical :: Typesを見てください。そのパラメータが関連する場合は、関連する「シグネチャ」モジュールを見てください。 – draegtun

0

変数の値が特定のパターンに収まるようにするには、Perlのパターンマッチング機能を使用するよりも良い方法はありません。

一方、特定のパターンを改善したい場合は、アドバイスを求めることができます。

このような正規表現を除外し、Regexp::Commonなどの施設を使用することで、独自のプログラムを簡単に実行できます。

7

Perlでのパラメータの検証のために絶対に素晴らしいモジュールがあります:Params::Validate

それはあなたがきれいで素敵な方法であなたのパラメータをチェックすることができます。私たちはそれを発見した瞬間からどこでも使用しました。

+0

URLは404です。ここにあります:[Params :: Validate](http://search.cpan.org/perldoc?Params%3A%3AValidate) –

8

よくある間違いは、すべての要件を単一の正規表現に詰め込むことです。これは初めてのことですが、通常は2週間後に誰も理解できない正規表現が得られます。

しないでください。要件ごとに1つの正規表現を使用します。

1

正規表現なしで検証を行う方法があります。 しかし - regexpを使用しても、読めるようにすることはできません。

regexpsには、// xフラグがあります。これは、という非常にの読みやすい正規表現を作成します。

もちろん、正規表現ですべてを検証する必要はありません。技術的に可能であっても、それは狂っていることが多い(電子メールアドレスの検証では4KBの長い正規表現と考える)。

+0

http://search.cpan.org/ perldoc/Email ::あなたのコードに4 KBの正規表現を貼り付けるのではなく、有効です。** **あなたのコードを読みやすくします。 –

+0

もちろん。しかし、正規表現が存在するという事実を否定するものではありません。そして、問題の根源的な解決策ではありません。 –

0

ある場合があります。

正規表現が最適なアプローチであることもありますが、時にはそうではありません。あなたはケースバイケースでそれを調べなければなりません。

+0

これは役に立ちません。それぞれのケースの例を追加すると便利です。 –

+0

これは、OPが最初にケースを提供することを必要とするでしょう。私は漠然としてデータフォーマットを記述している健全性チェックのための良い解決策を提案することはできません。 – Quentin

1

データを検証する方法は、何をしようとしているかによって異なります。データが単にパターンのように見えるだけであれば、それは正規表現の領域です。データが列挙からの正確な値でなければならない場合は、ハッシュ値が優れています。数値がある範囲内になければならない場合は、数値比較が使用すべきツールです。

一般的に、この種の質問に対する答えは「多分」です。

関連する問題