繁体   English   中英

Android中带有正则表达式的意外结果

[英]Unexpected result with regular expressions in Android

我想使用助手类来验证文本输入。 我从一种方法来证明一个名称,该名称以大写字母开头,最大长度为20个字符:

package xyz.helper;
import java.util.regex.Pattern;
public abstract class InputValidator {  
    public static boolean checkSingleName(String string) {  
        return Pattern.matches("^[A-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜ]{1}[a-zàáâãäåæçèéêëìíîïñòóôõöøùúûü]{1,19}", string); 
    }
}

例如,当我在活动中使用“ Hello”进行测试时,我会返回FALSE和错误消息。 我的正则表达式错了吗?

// Check User entries
private boolean checkEntries() {
    boolean validEntry = InputValidator.checkSingleName(title.toString());
        if (!validEntry) {
            title.setError(getString(R.string.error_occasion));
            return false;    
        }
        return true;    
}

谢谢你的提示

我认为您构建句子的方式目前不正确。 我会这样尝试:

return Pattern.compile("^[A-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜ]{1}[a-zàáâãäåæçèéêëìíîïñòóôõöøùúûü]{1,19}").matcher("Hello").matches()

通常,在诸如此类的问题中,您没有显示的就是问题所在。

演示正则表达式的有效Java实现(请参阅http://ideone.com/nFPcic ):

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.Pattern;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
      if(checkSingleName("Hello")) {
        System.out.println("Yes that is valid");
      }
      else {
        System.out.println("No that is not valid");
      }// your code goes here
    }
    public static boolean checkSingleName(String string) {  
        return Pattern.matches("^[A-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜ]{1}[a-zàáâãäåæçèéêëìíîïñòóôõöøùúûü]{1,19}", string); 
    }
}

使用"Hello"作为输入字符串打印出“是有效”。 当我在名称中添加数字时,它会显示“不是无效”。 如预期的那样。

如果您得到不同的结果,那是因为您没有显示某些内容。 您要测试的字符串的开头/结尾是否有回车符,空格或制表符?

顺便说一句,您实际上不需要大写字母后的{1} 而您的正则表达式具有严格的限制。 参见http://en.wikipedia.org/wiki/Category:Lowercase_proper_names_or_pseudonyms ,甚至更好, http ://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/-令人发指有时很有趣

暂无
暂无

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

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