2016-11-18 2 views
1

指定された文字列に最大12桁とダッシュを1つだけ含めることを検証する必要があります。正規表現を使用してダッシュを含む数字の12桁の文字列を検証する

初期正規表現:^[0-9]*-?[0-9]*$

変形正規表現:^([0-9]*-?[0-9]*){1,12}$

例(有効でなければならない):12356978-9

問題は、正規表現が長さを検証していないことであり、もう1つは機能しません。

注:すべてがString.lengthです()を使用して長さをチェックしない、正規表現で行われなければならない

+0

あなたには、いくつかの例を与える場合、それは良いでしょうあなたが比較したい文字列。 –

+0

ダッシュの後に数字が1つだけありますか? – Ravikumar

+0

123465789-10は有効ですが、長さのため123456789-1011は無効です.123465789はダッシュがないため無効です –

答えて

2

醜い方法:

^(?=\\d*-\\d*$)(?=.{1,13}$).*$ 

^([0-9]-[0-9]{1,11}|[0-9]{2}-[0-9]{1,10}|[0-9]{3}-[0-9]{1,9}| ...)$ 

は、2つの条件を組み合わせて、先読みを使用

(Inspired by this Alan Moore's answer

+0

2番目は受け入れられた回答である必要があります。もし私ができるなら、私はもう一度+1するだろうが、私はすでに行った:( –

2

あなたが正規表現の外に余分な条件を使用することができた場合:

String s = ... ; 
return s.length()<=13 && s.matches("^\\d+-\\d+$"); 

ダッシュは、文字列を開始または終了することができます場合は、次のように使用することができます。

String s = ... ; 
return s.length()<=13 && s.matches("^\\d*-\\d*$"); 
+0

純粋な正規表現で実装する方法についての任意のアイデア? – MYGz

+1

はい、あなたは@JiriTousekのソリューションを実装することができます。これは解決策がないことを意味するものではなく、Jiri Tousek以外のものがあれば私はそれを知らない。 –

関連する問題