java正则表达式,允许带有numberdCimal的$符号
我在EditText
上设置了一个InputFilter
来输入金额
InputFilter filter = new InputFilter() {
final int maxDigitsBeforeDecimalPoint = 5;
final int maxDigitsAfterDecimalPoint = 2;
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
StringBuilder builder = new StringBuilder(dest);
builder.replace(dstart, dend, source
.subSequence(start, end).toString());
if (!builder.toString().matches(
"(([1-9]{1})([0-9]{0," + (maxDigitsBeforeDecimalPoint - 1) + "})?)?(\\.[0-9]{0," + maxDigitsAfterDecimalPoint + "})?"
)) {
if (source.length() == 0)
return dest.subSequence(dstart, dend);
return "";
}
return null;
}
};
这很好用。现在我需要插入一个$
符号作为amount的前缀。所以我需要修改regx。我尝试的是:-
"(([${0,1}][1-9]{1})([0-9]{0," + (maxDigitsBeforeDecimalPoint - 1) + "})?)?(\\.[0-9]{0," + maxDigitsAfterDecimalPoint + "})?"
但是当我把TextWatcher
放进去时,它不允许我删除最后一个数字。
如果EditText
持有$3
,则不会删除它
edtAmount.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
String input = editable.toString();
if (TextUtils.isEmpty(input))
return;
if (input.equals("$")) {
edtAmount.setText("");
return;
}
if(!input.startsWith("$")){
edtAmount.setText("$" + input);
edtAmount.setSelection(edtAmount.getText().toString().length());
}
}
});
请告诉我罪魁祸首是什么。我不擅长正则表达式
# 1 楼答案
您可以使用以下库来实现此目的
https://github.com/BlacKCaT27/CurrencyEditText
You can use any type of currency with this
当前编辑文本
CurrencyEditText是Android的EditText视图对象的扩展。它是一个模块,设计用于在使用EditText字段从用户收集货币信息时提供易用性
CurrencyEditText设计用于所有符合ISO-3166标准的地区(应包括Android ships将提供的所有地区)
如果发现某个区域设置导致了问题,请在问题跟踪器中打开问题
更新的答案
如果上述链接不起作用,请使用以下代码-
}
此文件还需要属性。xml将此文件放在values文件夹中
现在您可以使用此编辑文本
希望这将满足您的要求,如果没有,您可以根据需要编辑此代码
# 2 楼答案
把
[$]?
放在最左边起作用了。因此,最终正则表达式将如下所示:谢谢大家