在 Android 中校验姓名是否合法通常涉及到对姓名格式的检查。考虑到中国用户的姓名可能包含汉字、也可能包含一些字母(例如少数民族姓名中可能包含拉丁字母),我们可以定义一个正则表达式来匹配这些情况。

一个简单的正则表达式可以是这样的:

String regex = "^[\\u4e00-\\u9fa5]+([·\\-_'\\s][\\u4e00-\\u9fa5]+)*$";
  • 1.

 这个正则表达式的含义如下:

  • ^ 表示字符串开始。
  • [\\u4e00-\\u9fa5] 匹配一个汉字。
  • + 表示前面的字符可以出现一次或多次。
  • ([·\\-_'\\s][\\u4e00-\\u9fa5]+)* 允许姓名中有特殊字符(如点、破折号、撇号、空格),并且这些特殊字符后面跟着至少一个汉字。括号内的整个模式可以不出现或出现多次。
  • $ 表示字符串结束。

下面是一个使用此正则表达式进行姓名校验的例子:

public class NameValidator {

    public static boolean isValidName(String name) {
        String regex = "^[\\u4e00-\\u9fa5]+([·\\-_'\\s][\\u4e00-\\u9fa5]+)*$";
        return name.matches(regex);
    }

    public static void main(String[] args) {
        // 测试数据
        String[] names = {"张三", "李四·王五", "赵六-", "John Doe", "张-"};

        for (String name : names) {
            System.out.println("Name: " + name + " is valid: " + isValidName(name));
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

 这段代码定义了一个 isValidName 方法,用于检验传入的姓名是否符合上述正则表达式的规则,并返回一个布尔值表示结果。在 main 方法中,我们提供了一些测试数据来验证这个方法的有效性。

如果你还需要支持拉丁字母作为姓名的一部分,可以将正则表达式修改为:

String regex = "^[\\u4e00-\\u9fa5a-zA-Z]+([·\\-_'\\s][\\u4e00-\\u9fa5a-zA-Z]+)*$";
  • 1.

这样就可以同时支持汉字和字母了。