比较 微信支付宝 添加银行卡
实现每四位隔符号
Format 算法 代码 Kotlin
输入 待格式化串 ,分隔符号
输出 格式化串
/**
* 通用bankcardFormat
*/
@JvmStatic fun newBankcardFormat(args: String,split: String) : String {
var ret : String = args.replace(" ","").replace(split,"")
if (Pattern.matches("^\\d{17,}$", ret)) {
ret = ret.replace("(\\d{4})(\\d{4})(\\d{4})(\\d{4})(\\d*)".toRegex(), "$1" + split + "$2" + split + "$3" + split + "$4"+split + "$5")
}else if (Pattern.matches("^\\d{13,}$", ret)) {
ret = ret.replace("(\\d{4})(\\d{4})(\\d{4})(\\d*)".toRegex(), "$1"+split+"$2"+split+"$3"+split+"$4")
}else if(Pattern.matches("^\\d{9,}$", ret)){
ret = ret.replace("(\\d{4})(\\d{4})(\\d*)".toRegex(), "$1"+split+"$2"+split+"$3")
}else if(Pattern.matches("^\\d{5,}$", ret)){
ret = ret.replace("(\\d{4})(\\d*)".toRegex(), "$1"+split+"$2")
}else{
ret = ret.replace("(\\d*)".toRegex(), "$1")
}
return ret
}
函数使用
为 EditText 添加 TextWatcher 监听
editBank.addTextChangedListener(object : TextWatcher {
private var oldString = ""
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
}
override fun afterTextChanged(s: Editable) {
if (oldString.equals(s.toString())) {
oldString = ""
return
} else {
//格式化
oldString = InputFilters.newBankcardFormat(s.toString(), "-")
s.replace(0, s.toString().length, oldString)
}
}
})