我如何检查字符串是否包含非ksc5601字母或不在Java/Kotlin?



我正在检查韩语字母,我试过用[^ㄱ-ㅎ|ㅏ-ㅣ|가-힣*$]。数字,英语,韩语。我使用^[0-9a-zA-Zㄱ-ㅎ|ㅏ-ㅣ|가-힣]*$

我使用DX音乐字体。它不支持所有的字母,因为它是KSC5601类型的。我想检查一下这种字体是否可以显示字符串中的特定字母。

例如,输入,,则无显示。我想显示toast消息,字符串包含非ksc5601类型,不能在EditText或TextView中显示再次写入。

et_answer.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, 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 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范围也可以这样做

最新更新