输入过滤器 - 两位小数的正则表达式

Ala*_*lan 2 java regex android android-edittext

我正在尝试为我创建一个正则表达式,EditText以仅允许美元格式的输入。但是它不起作用。

public class DecimalInputFilter implements InputFilter {

    Pattern mPattern;

    public DecimalInputFilter() {
        mPattern=Pattern.compile("^[0-9]+([.][0-9]{2})?$");
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

        Matcher matcher=mPattern.matcher(dest);
        if(!matcher.matches())
            return "";
        return null;
    }

}
Run Code Online (Sandbox Code Playgroud)

正则表达式的思维过程 -

  • 至少一个数字字符
  • 一个点后跟两个数字字符(可选)

当我尝试应用此功能时,它不允许我输入任何数字。我缺少什么?

小智 5

使用下一个过滤函数:

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
    if (source.equals("")) return null; // Para el backspace
    StringBuilder builder = new StringBuilder(dest);
    builder.replace(dstart, dend, source.subSequence(start, end).toString());
    Matcher matcher=mPattern.matcher(builder);
    if(!matcher.matches())
        return "";
    return null;
}
Run Code Online (Sandbox Code Playgroud)

因为如果您在构建器上匹配,它会让您知道最终字符串是否与建议的表达式匹配,否则它返回空字符串。