Java Regex名字验证

时间:2017-09-20 16:02:01

标签: java regex validation

据我所知,验证名字字段是非常有争议的,因为有很多不同的可能性。但是,我只是在学习正则表达式并且努力帮助理解这个概念,我设计了一些简单的验证来创建,只是尝试确保我能够使代码完全按照我的要求进行,尽管它是否是符合最佳业务逻辑实践。

我正在尝试验证一些事情。

  1. 第一个名称介于1到25个字符之间。
  2. 第一个名称只能以a-z(忽略大小写)字符开头。
  3. 之后,名字可以包含a-z(忽略大小写)和[' - ,。]。
  4. 第一个名称只能以a-z(忽略大小写)字符结尾。

    public static boolean firstNameValidation(String name){
    
        valid = name.matches("(?i)(^[a-z]+)[a-z .,-]((?! .,-)$){1,25}$");
    
        System.out.println("Name: " + name + "\nValid: " + valid);
    
        return valid;
     }
    

5 个答案:

答案 0 :(得分:0)

你的表情几乎是正确的。以下是满足所有条件的修改:

valid = name.matches("(?i)(^[a-z])((?![ .,'-]$)[a-z .,'-]){0,24}$");

答案 1 :(得分:0)

相同的正则表达式:

 var lookup = ["010101010", "0100101010", "01010101010", "etc"];

 function foo() {    
     // lookup is undefined
 }

答案 2 :(得分:0)

让我们改变要求的顺序:

  1. 忽略大小写:"(?i)"
  2. 只能以a-z字符开头:"(?i)[a-z]"
  3. 只能以a-z结尾:"(?i)[a-z](.*[a-z])?"
  4. 介于1到25个字符之间:"(?i)[a-z](.{0,23}[a-z])?"
  5. 可以包含a-z和[' - ,。]:"(?i)[a-z]([- ',.a-z]{0,23}[a-z])?"
  6. 最后一个应该做的工作:

    valid = name.matches("(?i)[a-z]([- ',.a-z]{0,23}[a-z])?")
    

    RegexPlanet上测试(按java按钮)。

    上述注意事项

    1. 可以使用"[a-zA-Z]"' instead of“(?i)”'
    2. 需要?,因为我们想要允许一个字符名称
    3. 23是总长度减去第一个和最后一个字符(25-1-1)
    4. - 必须[]内的第一个(或最后一个),否则它被解释为范围sepparator(假设您不是指{{1}之间的字符}和'

答案 3 :(得分:0)

试试这个正则表达式

^[^- '](?=(?![A-Z]?[A-Z]))(?=(?![a-z]+[A-Z]))(?=(?!.*[A-Z][A-Z]))(?=(?!.*[- '][- '.]))(?=(?!.*[.][-'.]))[A-Za-z- '.]{2,}$

Demo

答案 4 :(得分:0)

试试这个最简单的版本:

^[a-zA-Z][a-zA-Z][-',.][a-zA-Z]{1,25}$

感谢分享。