繁体   English   中英

如何检查用户输入的内容是否是单词,而不是(* !?)之类的特殊字符?

[英]How can I check if the user input is a word and not a special character like (*!?)?

我有以下代码(Option1):

if(!firstName.getText().toString().matches("/w+/")){
            error = error + getString(R.string.error_first_name_incorrect_resgister_activity) +"\n";

而且我有此代码(Option2)没有执行预期的操作(允许用户仅插入那些字符)

if(!lastName.getText().toString().matches("/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.\'-]+$/u")){
            error = error + getString(R.string.error_last_name_incorrect_resgister_activity) +"\n";

您可以使用模式(?ui)\\w+与unicode符号匹配

Java模式

        Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(your_text_string);
        boolean b = m.find();

        if (b) {
            // error occurred special chars
        }

首先,如Null所建议,您可以只检查字符串长度。 像这样:

if(firstName.getText().toString().length < 5){
            error = error + getString(R.string.error_first_name_incorrect_resgister_activity)

或者您也可以修改您的正则表达式,以便用户必须使用量词( {5,} )至少输入5个字母。 然后您的代码将如下所示:

if(!lastName.getText().toString().matches(/\w{5,}/u)){
        error = error + getString(R.string.error_last_name_incorrect_resgister_activity) +"\n";

要么

  if(!lastName.getText().toString().matches(/^[a-zA-Z\-_ ’'‘ÆÐƎƏƐƔIJŊŒẞÞǷȜæðǝəɛɣijŋœĸſßþƿȝĄƁÇĐƊĘĦĮƘŁØƠŞȘŢȚŦŲƯY̨Ƴąɓçđɗęħ‌​įƙłøơşșţțŧųưy̨ƴÁÀÂÄǍ‌​ĂĀÃÅǺĄÆǼǢƁĆĊĈČÇĎḌĐƊÐ‌​ÉÈĖÊËĚĔĒĘẸƎƏƐĠĜǦĞĢƔá‌​àâäǎăāãåǻąæǽǣɓćċĉčçď‌​ḍđɗðéèėêëěĕēęẹǝəɛġĝǧ‌​ğģɣĤḤĦIÍÌİÎÏǏĬĪĨĮỊIJĴ‌​ĶƘĹĻŁĽĿʼNŃN̈ŇÑŅŊÓÒÔÖ‌​ǑŎŌÕŐỌØǾƠŒĥḥħıíìiîïǐ‌​ĭīĩįịijĵķƙĸĺļłľŀʼnńn̈ň‌​ñņŋóòôöǒŏōõőọøǿơœŔŘŖ‌​ŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨ‌​ŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽ‌​Ẓŕřŗſśŝšşșṣßťţṭŧþúùû‌​üǔŭūũűůųụưẃẁŵẅƿýỳŷÿȳ‌​ỹƴźżžẓ]$/)){
            error = error + getString(R.string.error_last_name_incorrect_resgister_activity) +"\n";

我建议使用Character.isLetter(c)如下:

    char[] charArray= lastName.getText().toCharArray();

    for(Character c :charArray ){
        if(!Character.isLetter(c)){
            error = error + getString(R.string.error_last_name_incorrect_resgister_activity) +"\n";
            break;
        }
    }

测试:

char c1= '-';
char c2= 'A';
char c3= 'ę';
char c4= 'ð';
char c5= 'ã';
boolean flag1 =Character.isLetter(c1);
boolean flag2 =Character.isLetter(c2);
boolean flag3 =Character.isLetter(c3);
boolean flag4 =Character.isLetter(c4);
boolean flag5 =Character.isLetter(c5);
System.out.println(flag1);
System.out.println(flag2);
System.out.println(flag3);
System.out.println(flag4);
System.out.println(flag5);

结果:

false
true
true
true
true

编辑:

另外,如果您需要将数字视为有效字符(不是特殊字符),则需要使用Character.isDigit(c)

if(!Character.isLetter(c) && !Character.isDigit(c))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM