2016-11-18 24 views
1

我需要驗證給定字符串是否包含最多12位數字和恰好一個破折號。使用正則表達式驗證包含破折號的數字12位字符串

初始正則表達式:^[0-9]*-?[0-9]*$

改性正則表達式:^([0-9]*-?[0-9]*){1,12}$

實施例(應爲有效):12356978-9

的問題是,第一正則表達式不驗證長度,而第二個不起作用。

注:一切都必須在正則表達式來完成,使用string.length減()不檢查長度

+0

如果你舉一些例子說明這將是很好你想與之比較的字符串。 –

+0

破折號後只有一位數字嗎? – Ravikumar

+0

123465789-10有效,123456789-1011因爲長度無效,123465789因爲沒有破折號而無效 –

回答

2

醜陋的方式:

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

利用先行,結合兩個條件:

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

(啓發於this Alan Moore's answer

+0

第二個應該是被接受的答案。如果可以的話,我會再次嘗試+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的解決方案,它不是很可讀,但會完成這項工作。這並不意味着沒有解決方案,只是如果有的話,除了吉日圖斯克之外,我不知道它。 –

相關問題