2014-02-23 126 views
0

目前我使用的过滤器(用于格式化货币),但是,用户仍然能够进入前导零:防止前导零,除非后面跟着一个点?

00000334.43 // Is accepted but shouldn't be.. 
03000334.43 // I don't want a leading zero unless followed by a . 

我想只接受一家领先的零,如果它是一个.前的零。

据我了解,有一个空白editText,这将是不可能的,所以我想删除的零,除非在.用户类型之后,在使用的情况下,例如:

User types 0 // 0 - Ok 
User types . // 0. - This is fine 

0 // 0 - Ok 
4 // 04 - Not ok, 0 should be removed from the text edit. 

我它扩展了DigitsKeyListener类的自定义类中这样做 - 使用后者的filter()方法:

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, 
           int dstart, int dend) 
{ 
    // How can I achieve this inside the filter method? 
} 

我试过到目前为止:

replaceFirst() - 我试图使用这个正则表达式 - .replaceFirst("^0+(?!$)", "")但是它在尝试在打字后在开始处插入数字时会导致问题。我也不确定如何在滤镜方法中正确使用它。

任何帮助表示赞赏。

+1

你正在按键进行这种分析?如果到目前为止只输入了零,你不能只是推迟这个处理,直到输入一个非零或十进制数? – aliteralmind

+1

@aliteralmind确实,因为我需要检查旁边的数字是否是小数点,我想不出更好的方法?这是因为我的过滤的其余部分也是在逐个键的基础上完成的 – user2381114

回答

0

看起来像这样的正则表达式的.replaceFirst应该工作: ^0+(?=\d)

试试吧,看看有没有什么帮助。

+0

谢谢你,但你知道我可以在InputFilter的filter()方法中使用它吗?我正在考虑使用charAt(i + 1)来检查零是否在旁边。但我不确定 – user2381114

+0

'InputFilter' - 是你自己的班级吗?你能形容吗? –

+0

Here - http://developer.android.com/reference/android/text/InputFilter.html – user2381114