在Android中使用正则表达式的意外结果

时间:2014-02-13 21:01:01

标签: android regex

我想用helper类验证文本输入。我开始使用一种方法来证明单个名称的开头大写,最大长度为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); 
    }
}

当我在Activity中测试“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;    
}

感谢任何提示

2 个答案:

答案 0 :(得分:0)

我认为你构建句子的方式目前并不正确。我试试这个:

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

答案 1 :(得分:0)

通常,在这样的问题中,你没有表现出问题所在。

演示正则表达式的工作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"作为输入字符串。当我在名称上添加一个数字时,它会打印“Not that is valid”。正如所料。

如果你得到不同的结果,那是因为你没有展示的东西。 可能是您正在测试的字符串的开头/结尾有回车符,空格或制表符吗?

顺便说一句,在首字母大写之后你真的不需要{1};而且你的正则表达式非常严格。见http://en.wikipedia.org/wiki/Category:Lowercase_proper_names_or_pseudonyms,甚至更好,http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ - 发人深思,有时也很热闹。