Android输入框如何限制仅接受文本字符,禁止空格、回车等?
Android EditText 限制输入非文本字符解决方案
一、实现全字符仅接受文本字符的限制
你之前的问题出在使用contains方法——它只要字符串里存在符合规则的字符就返回true,哪怕后面跟着空格、回车这类非法字符。正确的做法是校验整个字符串是否完全由允许的字符组成,或者直接过滤掉非法字符。
方法1:在onChange中过滤非法字符
直接把输入内容里的非文本字符(空格、回车等)过滤后再传给回调:
onChange = { input -> // 只保留大小写字母和数字,去掉所有其他字符(包括空格、回车) val filteredContent = input.replace(Regex("[^a-zA-Z0-9]"), "") onInput(filteredContent) }
这里的[^a-zA-Z0-9]是正则反向匹配,意思是"除大小写字母和数字外的所有字符",会被替换为空字符串。
方法2:使用Android官方推荐的InputFilter
这是更可靠的方式,能在输入时直接拦截非法字符,避免onChange的滞后问题:
// 创建输入过滤器 val textInputFilter = InputFilter { source, _, _, _, _, _ -> // 过滤掉非字母数字的字符 source.toString().replace(Regex("[^a-zA-Z0-9]"), "") } // 给EditText设置过滤器 editText.filters = arrayOf(textInputFilter)
二、匹配回车(Enter/Return)的正则写法
回车对应的正则规则:
\r:匹配回车(Carriage Return,ASCII 13)\n:匹配换行(Line Feed,ASCII 10)- 同时匹配两种回车换行,用
[\r\n]
比如单独去掉输入中的回车换行:
val noNewLineContent = input.replace(Regex("[\r\n]"), "")
内容的提问来源于stack exchange,提问作者kgsharathkumar
相关产品推荐
相关产品推荐

