2016-08-09 8 views
3

私はコードの形式を検証する必要がある学校のプロジェクトに取り組んでいます。書式は3桁の大文字3桁で、少なくとも1桁は0ではないので、ABC001が有効です。 ABC000は無効です。Javaのコード形式を確認してください

私が立ち往生しているのは、001-999が有効な間に000が無効になるように数字を検証するためのフォーマットを書く方法です。以下はコードですが、000が有効になるように現在書かれています。

public static boolean validateInvoiceCode(String invoiceCode) 
{ 
     return invoiceCode.matches("[A-Z][A-Z][A-Z][0-9][0-9][0-9]"); 
} 

答えて

5

000をブラックリストに載せ負の後読み(?<!...)追加:あなたはまた、量指定子を使用して、正規表現を向上させたい、と数字のため\d

[A-Z][A-Z][A-Z][0-9][0-9][0-9](?<!000) 

Regex101 Demo

を:

[A-Z]{3}\\d{3}(?<!000) 

Regex101 Demo

+1

ルックアヘッドでルックバックを選択した理由は何ですか?ちょっと興味があるんだけど。 – shmosel

+1

@shmoselそのようにすれば、入力に数字がまったくない場合は早く失敗します。ブラックリストに[この場合](http://stackoverflow.com/a/38841776/5743988)のように、拒否する入力が2つ以上ある場合に便利です。 – 4castle

関連する問題