如何使用Java正则表达式验证字符串?

8
我希望创建一个程序,能够检查字符串是否可以作为人名。但我无法使用正则表达式验证字符串是否符合成为人名的要求。你能帮我在代码中实现正确的条件吗?如果以下条件均满足,则将字符串视为人名:
  • 第一个单词前没有空格
  • 没有非字字符
  • 没有 2 个或更多连续空格
我也想删除字符串中最后一个单词后的空格(如果存在)。我正在做这一切只是为了强制用户输入正确的文本格式,因为我很快会将它发布到我的 JSON 上。因此,首先应该验证所有内容。关于空格的问题没关系,因为我已经在我的 XML 文件中定义了 EditText 的正确 inputType。
这是我尝试实现的代码:
public boolean isFirstnameValid(String regex, String text){

        Pattern checkRegex = Pattern.compile(regex);
        Matcher regexMatcher = checkRegex.matcher(text);

        while(regexMatcher.find()){
            if(regexMatcher.group().length()!=0){
                Log.e("searched",regexMatcher.group().trim());
            }
        }
        return false;
    // I returned false because, I'm still confused about what conditions should I implement.
}

这是主方法,我的实际参数被实施:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       // String firstname = "Kirby Aster";
       // String lastname = "Abadilla";

        et =(EditText) findViewById (R.id.editText1);
        b = (Button) findViewById (R.id.button1);
        b.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                String text = et.getText().toString();
                isFirstnameValid("[A-Za-z]{1,}", text);
            }

        });
    }

2
不要验证人名。就这样。http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ - nhahtdh
@nhahtdh 非常感谢!现在我明白为什么不应该验证它了。 - KirbyAbadilla
来自com.hamcrest库的Matcher?附:来自java.regex.util - Nusrat Nuriyev
1个回答

12

我不喜欢isFirstnameValid方法的实现。我认为你把它搞得比应该的复杂了一些。我会使用简单的String.matches来完成这项工作,例如:

public boolean isFirstnameValid(String text){

    return text..matches("^([A-Za-z]+)(\\s[A-Za-z]+)*\\s?$");
}

上述正则表达式符合您的所有要求,包括允许在末尾加空格。如果您还考虑每个单词首字母大写的条件(正则表达式会稍作更改),则可以这样调用:

if( isFirstnameValid(text) ){
     text = text.trim();
} else {
    // define your failing condition here
}
如果您有任何疑问,请随时提出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接