问题描述
我正在检查韩文字母并尝试使用 [^ㄱ-ㅎ|ㅏ-ㅣ|가-힣*$]
。
对于数字,英语,韩语。我正在使用 ^[0-9a-zA-Zㄱ-ㅎ|ㅏ-ㅣ|가-힣]*$
。
我正在使用 DX 音乐字体。它不支持所有字母,因为它是 KSC5601 类型。 我想检查一下这个字体是否可以在字符串中显示特定的字母。
例如,如果我输入 숮
,쀍
,它什么也不显示。我想显示字符串包含非 KSC5601 类型的吐司消息,该类型无法在 EditText 或 TextView 中再次写入。
et_answer.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?,p1: Int,p2: Int,p3: Int) {
}
override fun onTextChanged(p0: CharSequence?,p3: Int) {
}
override fun afterTextChanged(p0: Editable?) {
if (!Pattern.matches(TextUtil.KoEnNumRex,et_answer.text.toString())) {
MyToast(this@MyActivity).makeText("Only Korean,English,Number are available.")
return
}
}
}
解决方法
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 dend) {
Pattern p = Pattern.compile("[a-zA-Z|\u4e00-\u9fa5]+");
Matcher m = p.matcher(source.toString());
if (!m.matches()) return "";
return null;
}
};
where \u4e00-\u9fa5 这是中文字母的 unicode 范围,如果你找到韩文的 unicode 范围,可以做到类似的