簡體   English   中英

Android-正則表達式將編輯文本格式化為xxx.xx

[英]Android - Regex to format the edittext as xxx.xx

我從Android EditText的Limit Decimal Places中提取了一些代碼。

正則表達式如下。 我已經使用“ 3”作為digitsBeforeZero和“ 2”作為digitsAfterZero

mPattern=Pattern.compile("[0-9]{0," + (digitsBeforeZero-1) + "}+((\\.[0-9]{0," + (digitsAfterZero-1) + "})?)||(\\.)?"); 

它適用於除xxx以外的所有情況。 當我嘗試輸入數字“ xxx.xx ”時,不允許我在“ xxx ”之后輸入“ 點(。) ”。

請幫助我了解正則Regex

您的表情可以分解為多個部分,以進行更好的解釋。 假設您使用

int digitsBeforeZero=3;
int digitsAfterZero=2; 

如您所建議,我們具有以下表達式:

"[0-9]{0,2}+((\\.[0-9]{0,1})?)||(\\.)?"

第一部分中的符號可以是任意數字,方括號內的部分是一個量詞,它告訴您允許使用多少個前一個符號,在這種情況下,它將接受0、1或2位數字,加號也是一個量詞代表“一個或多個”,但是因為它前面沒有符號,所以不需要它,只會使表達式模糊。 在括號內,您會找到一個組,該組用於匹配和檢索表達式中的特定匹配項,您可以在此處閱讀有關組的更多信息 嵌套括號內的表達式將接受“。”。 字符后跟1或0位數字,並且圓括號外的問號表示它前面的表達式可以在字符串中,也可以不在字符串中。 最后是“ ||” 是邏輯“或”,表示它也將匹配其后的表達式。 該表達式將接受“。”。 並且它可以存在或不存在(“?”量詞),因此它也匹配一個空字符串。

如果您只想將xxxx.yyyy之類的字符串與n'x'和m'y'匹配,則這是一個更好的方法:

"[0-9]{0,"+n+"}(\\.[0-9]{0,"+m+"})?"

更清楚的是,它也將匹配一個空字符串,即單個“。”。 但是,它也將匹配“ 333”之類的字符串。 和“ .33”,因此您必須根據需要進行調整。

從兩個表達式中刪除-1

使用上面的表達式,您實際上是在嘗試為輸入3,2匹配小數點前的0到2位數字和小數點后的0到1位數字,因此不允許您輸入小數點( . )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM