2016-09-14 8 views
1

シンボル4つのフォーマット以下のようなだけ正規表現を私は(12文字)と数字を受け付けるテキストボックスを持っている

12345-1234-12 
1234-1234-12 
12345-123-12 
12345-1234-1 

私はこの正規表現を試し

"(\\d{4,5}-\\d{3,4}-\\d{1,2})" 

しかし私の要求ではないフォーマットの下でも受け入れています。下のフォーマットを受け入れることをお勧めしません。

1234-123-1 
1234-1234-1 

おすすめ私は他の正規表現は動作しますか?

+1

「運がない」を定義します。何が起こった?あなたはどうやってそれを使いましたか? – Tunaki

+0

それは私の必要条件でない1234-123-1 1234-1234-1を受け入れています – Krishna

+0

他の文字列とのマッチングはなぜ間違っていますか?なぜ彼らは一致してはならないのか分かりません... – fabian

答えて

2

肯定的なlookbehindを使用すると、別の制約をチェックすることもできます。例えば。

^(\d{4,5}-\d{3,4}-\d{1,2})(?<=^.{12}) 

チェックし、行の先頭から(?<=^.{12})に文字列の一部が正確に12文字を持っている場合。

Javaの例:

Pattern p = Pattern.compile("^(\\d{4,5}-\\d{3,4}-\\d{1,2})(?<=^.{12})"); 
for (String s : new String[]{"12345-1234-12", 
    "1234-1234-12", 
    "12345-123-12", 
    "12345-1234-1", 
    "1234-123-1", 
    "1234-1234-1" 
}) { 
    System.out.println(s); 
    System.out.println(p.matcher(s).matches()); 
} 

出力

12345-1234-12 
false 
1234-1234-12 
true 
12345-123-12 
true 
12345-1234-1 
true 
1234-123-1 
false 
1234-1234-1 
false 

13文字の文字列も一致する必要がある場合、後読みは、(?<=^.{12,13})に変更することができます。 (最初の入力にはtrueが返されます)

+0

おかげでfabian ..それは働いている – Krishna

関連する問題