2017-04-25 69 views
0

我有這樣的正則表達式匹配:^(\d*.?\d*)$所有數字,但有些數字不能匹配這個表達式正則表達式與某些數字

一些例子:

54139 // work 
24.711 // won't work, not a float but dot is the separator 
0 // won't work 
60 // won't work 

我用這個表達式中RegexValidator。我確認一個文本框:

TextField textField = new TextField(caption); 
textField.setValue(value); 
textField.addValidator(new StringLengthValidator(value + " ...",10, 50, true)); 
textField.addValidator(new RegexpValidator("^(\\d*.?\\d*)$", value + " ...")); 

我與另一個正則表達式試了一下:^[0-9,.]+$

+2

用斜線將點擊...'\ .'! –

+0

你是什麼意思'不是一個浮點數,但點是分隔符?它應該被解析爲兩個獨立的整數嗎? – Aaron

+0

@亞倫,數字不是十進制數字。點是分隔符 – emoleumassi

回答

0

如果我明白你的問題正確,你就驗證了多線TextField的內容和想接受內容由一行或多行非空序列的.分隔的浮點數和整數組成。

此聲明可以簡化如下:您希望匹配由.或換行符分隔的數字序列,其中數字可以包含小數部分。

如果然後將使用以下RegexpValidator

new RegexpValidator("\\d+(,\\d+)?([.\\n]\\d+(,\\d+)?)*", true, value + "...") 

在該正則表達式,一個數表示爲\\d+(,\\d+)?,它代表一個強制整數部分,接着用其逗號分隔符可選的小數部分。

全局正則表達式接受一個數字,例如上面定義的數字,然後是一個(可能是空的)其他數字序列,前面是一個接受的分隔符,即.或一個換行符。

我驗證了我的答案與下面的表達式返回true

"54139\n12.5\n1,2.5,3\n12,5".matches("\\d+(,\\d+)?([.\\n]\\d+(,\\d+)?)*"); 

請注意,我刪除您使用的錨和使用RegexpValidatorcomplete參數來代替。

該正則表達式可以被減少到\d+([.,\n]\d+)*,但會停止表示作爲數字一部分的,之間的分隔符.之間的差異。在驗證程序的運行時間中,這並不重要,但可能會給維護代碼的人帶來混淆,如果稍後想要匹配不同的數字,則不易重用。