首页 > 解决方案 > 如何在 Java/Kotlin 中检查字符串是否包含非 KSC5601 字母?

问题描述

标签: androidunicodefontscjk

解决方案


 public class MainActivity extends Activity {

    private EditText editText;

    private String CharacterSet = "~#^|$%&*!FGHIJKLMOPTWXYZ";

    private InputFilter filter = new InputFilter() {

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

            if (source != null && !CharacterSet.contains(("" + source))) {
                return "";
            }
            return null;
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.editText);
        editText.setFilters(new InputFilter[] { filter });
    }

}

在这里,我们定义了一个有效的字符集,并且只允许它作为输入

<EditText
    android:id="@+id/nameText"
    android:layout_width="177dp"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:digits="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ" />

同样的事情也可以在布局中完成

如果你以这种方式实现 InputFilter

InputFilter typeFilter = new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            Pattern p = Pattern.compile("[a-zA-Z|\u4e00-\u9fa5]+");
            Matcher m = p.matcher(source.toString());
            if (!m.matches()) return "";
            return null;
        }
    };

其中\u4e00-\u9fa5 这是中文字母的 unicode 范围,如果您找到韩语的 unicode 范围,可以这样做


推荐阅读