2012-03-08 13 views
0

私は検証する必要があるいくつかのフォーム番号があります。私は複数の試みを試みましたが、まだそれを得ていません。多くは形式番号で許可されている間、私は課す必要があるいくつかの制限があります。Regexp:特定の文字の場所と頻度を制限する

は、これらのルールのすべてを強制する必要があります。

  • をAZが許可されますが必須ではありません(弾丸4を参照)
  • 0- 9は許可されていますが、必須ではありません(箇条書き4参照)。
  • ピリオド(小数点)とダッシュ(存在する場合)は、書式番号ごとに1回のみ許可されます。 -
  • 最小長は1文字で、スペース、ダッシュまたはピリオドにすることはできません。
  • 複数のスペースは使用できますが、2つのスペースは隣り合わない場合があります。先行するスペースも後続するスペースも許されません。

これは私が以前に持っていたものですが、上記のルールがすべて強制されたわけではありません。

[A-Z0-9]([A-Za-z0-9 -.])*[A-Z0-9] 

したがって、これらは、新たな要件の下で有効な形式番号の例のようになります。

123 
123 456 
A1 IL 23 MN 
CL-100 2.0 

これらは、新たな要件の下で無効なフォーム番号の例のようになります。

123 456 
25! 25 
25-IL 30-1 
aa bb CC 
+0

正規表現を使用している言語は何ですか? – xanatos

+0

xanotos:これはJava Webアプリケーションで使用されます。 – johkar

答えて

0

これは

^([A-Z0-9]|(?!)(?!.* $)(?!.* )(?!.*-.*-)(?!.*\..*\.)(?![.-]$)[A-Z0-9 .-]+)$ 

動作するはず2つの部分があります。最初の文字は[A-Z0-9]です。 1文字でない場合は、(?!)(?!.* $)(?!.* )(?!.*-.*-)(?!.*\..*\.)(?![.-]$)(順不同):空白で始まり、空白で終わりなし、連続した二重空白なし、なしなし-、なし2 .、単一文字なし.または-文字列の末尾に。そして、「ベース」のパターン(の一つ以上)を使用すると、別の\\をエスケープする必要があります[A-Z0-9 .-]+

注ので、\\があります。

+0

xanatos:ありがとうございます。その多くは表示されていますが、1つのピリオドまたはダッシュをフォーム名にすることはできます。 – johkar

+0

@johkarが修正されました。 – xanatos

+0

xanatos:ありがとう。それは今働いている。 – johkar

0

はそれをしません何らかの理由ですべて正規表現にする必要がありますか? \s\sを調べて一致させ、falseを返すようにすることができます。あなたはそれぞれのキャラクターを見て、それらの1つ以下が.であり、それらの1つ以上が-であることを確認することができます。先頭または末尾に空白がないかチェックすることもできます。また、ユーザーに親切で入力をトリミングすることもできます。少なくとも1文字は持っていることを確認し、長さがまったく1文字であれば、ダッシュやピリオドではありません。

最後に、他の条件がすべて満たされているため、文字列を[A-Z0-9 -.]*と一致させることができます。

あなたの失敗した正規表現に基づいて、あなたは実際に会いたいと思う条件がもっとあると思いますが、あなた自身でそれらを満たす方法を理解するのに十分な助けとなりました。

+0

Alexander Corwin:私は間違いなくトリムを行うことができますが、残りの部分はできるだけ1つの正規表現にする必要があります。システムは、検証に使用する1つの正規表現を受け入れます。 johkar – johkar

関連する問題