【问题标题】:Java Regex to Validate Full Name allow only Spaces and Letters验证全名的 Java 正则表达式只允许空格和字母
【发布时间】:2013-03-26 04:38:58
【问题描述】:

我希望正则表达式仅验证字母和空格。基本上这是为了验证全名。例如:Steve Collins 先生或 Steve Collins 我试过这个正则表达式。 “[a-zA-Z]+\.?”但是没有用。有人可以帮助我吗 p.s.我使用Java。

public static boolean validateLetters(String txt) {

    String regx = "[a-zA-Z]+\\.?";
    Pattern pattern = Pattern.compile(regx,Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(txt);
    return matcher.find();

}

【问题讨论】:

    标签: java regex validation


    【解决方案1】:

    怎么样:

    • 彼得·穆勒
    • 弗朗索瓦·奥朗德
    • 帕特里克·奥布莱恩
    • Silvana Koch-Mehrin

    验证名称是一个难题,因为有效名称不仅由字母 A-Z 组成。

    至少你应该对字母使用 Unicode 属性并添加更多特殊字符。第一种方法可以是例如:

    String regx = "^[\\p{L} .'-]+$";
    

    \\p{L} 是一个Unicode Character Property,可以匹配来自任何语言的任何类型的字母

    【讨论】:

    • 是的,这非常正确。这个正则表达式完美地工作。智能 one.thnx 很多
    • (基于stema的回答)这个怎么样:"^\pL+[\pL\pZ\pP]{0,}" 现在所有的破折号、点和空格也都是unicode
    • “+”代表什么?
    • @summers 加号表示一个或多个重复
    • ^[\\p{L}]+$ 似乎也适用于所有类型的空格。空格是否也属于 Unicode 字符类别?
    【解决方案2】:

    试试这个正则表达式(允许字母、点、空格):

    "^[A-Za-z\s]{1,}[\.]{0,1}[A-Za-z\s]{0,}$" //regular
    "^\pL+[\pL\pZ\pP]{0,}$" //unicode
    

    这也将确保 DOT 永远不会出现在名称的开头。

    【讨论】:

    • Java 必须使用 \\s 吗?
    • "\s" 匹配单个空白字符,包括空格、制表符、换页符、换行符
    • 我试过这个。但即使我输入数字,它也会返回 true。
    • 试试这个:"^[A-Za-z\s]{1,}[\.]{0,1}[A-Za-z\s]{0,}$"
    • 除了这些情况外它工作正常。 3史蒂夫柯林斯先生,史蒂夫柯林斯先生 44柯林斯先生,史蒂夫柯林斯先生44
    【解决方案3】:

    对于那些使用 java/android 并为这件事而苦恼的人,请尝试:

    "^\\p{L}+[\\p{L}\\p{Z}\\p{P}]{0,}"
    

    这适用于像

    这样的名称
    • 何塞·布拉桑

    【讨论】:

    • 我对正则表达式不太了解,但我想知道这个正则表达式是否也停止数字
    【解决方案4】:

    你甚至可以试试这个表达式 ^[a-zA-Z\\s]*$ 来检查一个只有字母和空格的字符串(没有别的)。

    对我来说它有效。希望它也适用于您。

    或者把这段代码看一遍:

        CharSequence inputStr = expression;
        Pattern pattern = Pattern.compile(new String ("^[a-zA-Z\\s]*$"));
        Matcher matcher = pattern.matcher(inputStr);
        if(matcher.matches())
        {
             //if pattern matches
        }
        else
        {
             //if pattern does not matches
        }
    

    【讨论】:

      【解决方案5】:

      请试试这个正则表达式(只允许字母和空格)

      “[a-zA-Z][a-zA-Z]*”

      如果你想要它用于IOS,那么,

      NSString *yourstring = @"hello";
      
      NSString *Regex = @"[a-zA-Z][a-zA-Z ]*";
      NSPredicate *TestResult = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",Regex];
      
      if ([TestResult evaluateWithObject:yourstring] == true)
      {
          // validation passed
      }
      else
      {
          // invalid name
      }
      

      【讨论】:

      • [a-zA-Z][a-zA-Z ]*[a-zA-Z][a-zA-Z ]+ 有什么区别?你知道吗?
      • * 表示可选(零个或多个),+ 表示多于一个。因此,假设您使用单个字符进行检查,那么 [a-zA-Z][a-zA-Z ]* 将返回 true 但对于 [a-zA-Z][a-zA-Z ]+ 返回 false 因为您需要 2 个字符。注意:您可以使用[a-zA-Z]+ 代替[a-zA-Z][a-zA-Z ]* 两者是等价的。
      【解决方案6】:

      仅匹配字母和空格的正则表达式模式:

      String regexUserName = "^[A-Za-z\\s]+$";
      

      【讨论】:

        【解决方案7】:

        只接受带空格的字符:-

         if (!(Pattern.matches("^[\\p{L} .'-]+$", name.getText()))) {
            JOptionPane.showMessageDialog(null, "Please enter a valid character", "Error", JOptionPane.ERROR_MESSAGE);
            name.setFocusable(true);
            }  
        

        【讨论】:

          【解决方案8】:

          我个人的选择是: ^\p{L}+[\p{L}\p{Pd}\p{Zs}']*\p{L}+$|^\p{L}+$,地址:

          ^\p{L}+ - 它应该以 1 个或多个字母开头。

          [\p{Pd}\p{Zs}'\p{L}]* - 它可以包含字母、空格字符(包括不可见字符)、破折号或连字符以及 ' 任意顺序 0 次或多次。

          \p{L}+$ - 它应该以 1 个或多个字母结尾。

          |^\p{L}+$ - 或者它应该只包含 1 个或多个字母(这样做是为了支持单个字母名称)。

          已删除对点(句号)的支持,例如在英式英语中,它可以在 Mr 或 Mrs 中删除。

          【讨论】:

          • 不应该也支持印地语名字吗?比如रोहितशर्मा。应该接受任何语言字符吗?但它无法将印地语类型脚本梵文识别为语言字符。
          • 不幸的是,它工作正常。梵文包含零宽度连接符,因为它是复杂的脚本。 en.wikipedia.org/wiki/Zero-width_joiner
          【解决方案9】:

          要仅验证字母和空格,试试这个

          String name1_exp = "^[a-zA-Z]+[\-'\s]?[a-zA-Z ]+$";
          

          【讨论】:

          • 如果我想验证字符数可能是什么代码?
          【解决方案10】:

          验证以下值: ""、"FIR"、"FIR"、"FIR LAST"

          /^[A-z]*$|^[A-z]+\s[A-z]*$/
          

          【讨论】:

            【解决方案11】:

            看看这个。

            String name validation only accept alphabets and spaces
            public static boolean validateLetters(String txt) {
            
                String regx = "^[a-zA-Z\\s]+$";
                Pattern pattern = Pattern.compile(regx,Pattern.CASE_INSENSITIVE);
                Matcher matcher = pattern.matcher(txt);
                return matcher.find();
            
            }
            

            【讨论】:

            • 这比公认的答案更好吗?这与 Peter MüllerFrançois Hollande 不匹配
            【解决方案12】:

            支持像印地语这样可以在语言字符之间包含 /p{Mark} 的语言。 我的解决方案是^[\p{L}\p{M}]+([\p{L}\p{Pd}\p{Zs}'.]*[\p{L}\p{M}])+$|^[\p{L}\p{M}]+$

            你可以在这里找到所有的测试用例 https://regex101.com/r/3XPOea/1/tests

            【讨论】:

              【解决方案13】:

              @amal。此代码将符合您的要求。只允许字母和中间的空格,没有数字。文本以任何字母开头,中间只能有空格。 “^”表示行首,“$”表示行尾。

              public static boolean validateLetters(String txt) {
              
                  String regx = "^[a-zA-Z ]+$";
                  Pattern pattern = Pattern.compile(regx,Pattern.CASE_INSENSITIVE);
                  Matcher matcher = pattern.matcher(txt);
                  return matcher.find();
              
              }
              

              【讨论】:

                【解决方案14】:

                试试这个:

                public static boolean userNameValidation(String name){
                
                return name.matches("(?i)(^[a-z])((?![? .,'-]$)[ .]?[a-z]){3,24}$");
                }
                

                【讨论】:

                  【解决方案15】:

                  这适用于我验证引导程序

                  $(document).ready(function() {
                  $("#fname").keypress(function(e) {
                  var regex = new RegExp("^[a-zA-Z ]+$");
                  var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
                  if (regex.test(str)) {
                   return true;
                  }
                  

                  【讨论】:

                  • 我认为你混淆了 Java 和 JavaScript。
                  猜你喜欢
                  • 2017-06-17
                  • 1970-01-01
                  • 2021-10-22
                  • 1970-01-01
                  • 2016-02-21
                  • 2022-01-14
                  • 1970-01-01
                  相关资源
                  最近更新 更多