2009-04-18 2 views
5

現在、理論的には正規表現の背景がありますが、ほとんど使用していません。正規表現を入力検証に使用することをお勧めしますか?

一般的な入力検証用のクラスをいくつか開発しようとしており、正規表現を使用せずにメソッドを記述しています。私は最近、this Jeffの記事を読んでいますが、今では正規表現をそれらの中に組み込むメソッドのいくつかをリファクタリングするべきかどうか疑問に思っています。

パーザなどのアプリケーションのフロントエンドを構築するために正規表現が使用されていると思っていましたが、明らかにそれ以上のものに使用されています。

正規表現ですべての検証を行うことはできないし、そうするべきではないことを認識していますが、入力を検証するのは良い方法ですか?

答えて

5

正規表現は、テキストとパターンを一致させる単なる1つの方法です。正規表現を使用せずに同じことを行う他の方法があります。正規表現をあなたのコードに含める必要がある流行語と考えるべきではありません。どのツールでも最高の結果を得ることができます。入力検証のために

ちょうどあなたがあなたが受け入れ、デフォルトで他のすべてを拒否したいテキストの正確種類を指定できます使用しているものは何でもツールを確認してください。正規表現では、特定の種類の入力に対して、これを簡単かつ簡潔に行うことができます。そのため、多くの人が使用しています。

2

私はあなたが右の1つに、しかし、社会例えば、正確に特定の方法(する必要がものを正確にしているではないすべての検証がまたは正規表現

で行われるべきであることを実感セキュリティ番号、電話番号(ある程度まで)、電子メールなど)を使用すると、正規表現を使用すると便利です。

しかし、それらに頼らないでください。たとえば、私はかなり良い電子メールの正規表現のチェックを持っていますが、私はまた、明らかに偽のドメイン(example.comや私のデータベース(主にローカルのもの)で見たいくつかのもの)のリストを照合しています。

1

はい - 正規表現は入力検証に非常に有効です。しかし、多くの場合、他のメソッドや、時には特別なバリデーターオブジェクトとして可能な限りこれらのものを抽象化することは、非常に良い考えです。

正規表現では多くの問題が発生することがよくありますが、入力検証はまったく無条件に輝くケースです。

0

私はそれをベストプラクティスと呼んでいますが、私は確かに正規表現を使って電子メールのアドレスや操作などの検証を行っています。ベストプラクティスではない場合、それは確かに一般的なプラクティスです。

4

はい!

通常、正規表現を使用すると、非常に短時間でかなり読みやすい非常に堅実な入力検証を構築できます。

正しい仕事をして、メンテナンスが可能で、あなたが他のものに乗り込むことができるものは、私の本にはいいです。

いつものように、には常識が適用され、正規表現が悪いツールの場合は使用しないでください。正規表現の検証を使用して

4

良いアイデアは、あなたがより多くのbesic正規表現適用に分岐していないことを提供する:

をあなたはMichael Ash日付を確認するために彼の試みにないような潜在的に複雑な構造を検証し、自分自身を見つけた場合あなたは穴場で、トラブルを求めて:

^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[13-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$ 

あなたのコードはメンテナンスの問題を被るだろう。

1

質問に対する回答は、コードの目的次第です。はい、正規表現は素晴らしく、すべての前回の回答(私が読んだこと)に同意します。

正規表現を使用すると、特定の入力を検証するのに便利だが、すばらしい方法を覚えて正しい場所に正規表現を適用する必要があります。私はあなたが投稿した記事を読んで、私は主題が正しい方法で正規表現を使用することについてより多くのものだと思った。つまり、それはすぐにタイプアップすることを知っているので、ソリューションとして使用しないでください。 turnは読みにくく、長くてひどい探しのコードを生成します。

正規表現が「悪い習慣」であると書かれているところからは取り上げません。彼はちょうど間違いなく、設計を検討してより良いコンセプトを実装するか、正規表現がそのコンセプトであると結論付けることができます。

0

クライアント側とサーバー側の両方で検証する必要があります。正規表現は、文字列が有効な形式(電子メールアドレス、電話番号など)を持っていることを確認するのに非常に適していますが、サーバーはそれだけに依存するべきではありません。サーバはそれ自身でチェックし、ビジネス上の正当性も検証しなければならない(例えば、上記のデータベースの偽のアドレスをチェックした答えと同様)。

1回で十分ではありません。 「有効な」程度はさまざまです。

0

検証する入力が通常の言語である場合は、正規表現が正当な検証ツールです。

関連する問題