【问题标题】:Java Regex (No White Space or 0-9)Java 正则表达式(无空格或 0-9)
【发布时间】:2012-07-13 22:33:03
【问题描述】:

通过问题输入报告所有者的名字作为字符串。

需要一个正则表达式来有条件地检查,以确保名字不包含任何数字字符,介于 0 到 9 之间的数字。如果包含,则必须删除它。名字也不能包含任何空格。

    do
    {
        System.out.println("Please enter your FIRST name:");
        firstName = keyboard.next();
        firstName= firstName.toUpperCase();
    }

    while( !firstName.matches("^/s^[a-zA-Z]+$/s"));

    System.out.println("Thanks " + firstName);

Output
p
Please enter your FIRST name:
p p
Please enter your FIRST name:
Please enter your FIRST name:

【问题讨论】:

    标签: java regex eclipse


    【解决方案1】:

    你的正则表达式搞混了。试试这个:

    while(!firstName.matches("^[^\\d\\s]+$"));
    

    正则表达式"^[^\\d\\s]+$" 表示“非数字或空格,以及至少一个字符”

    【讨论】:

    • 但你不能忘记那些法国、非洲和其他外来国家的名字,它们的名字中至少可以有“'”。我敢肯定还有其他奇怪的字符,但我只是说几个。
    • @Lopina 好点。我已将正则表达式更改为 exclude 而不是 include,所以今天是巴士底日,法国万岁!
    • 不错,绝对比我自己的解决方案更干净:D
    【解决方案2】:

    如果你想消除数字,只需强制:

    \D*
    

    在你的匹配器中

    【讨论】:

      【解决方案3】:

      因为你有 firstname 大写和 matches 方法匹配整个输入, [A-Z]+ 就足够了。

      while( !firstName.matches("[A-Z]+"));
      

      while( !firstName.matches("\\p{Lu}+"));
      

      【讨论】:

      • 验证您可能有空间的正则表达式部分
      【解决方案4】:

      试试这个:^[a-zA-Z,.'-]+$。 :D

      另外,如果你想尝试你的正则表达式,rubular.com 是一个很好的地方:D

      您使用了 Scanner#next,而不是 Scanner#nextLine。

      来自 Scanner#next JavaDoc:

      从这个扫描器中查找并返回下一个完整的令牌。一种 完整的令牌之前和之后是匹配的输入 分隔符模式。

      我相信一个这样的分隔符是\s+ :D

      import java.util.Scanner;
      
      public class FirstNameParser {
      
          public static void main(String[] args) {
              Scanner keyboard = new Scanner(System.in);
              String firstName = null;
      
              do {
                  System.out.print("Please enter your FIRST name: ");
                  firstName = keyboard.nextLine();
                  firstName = firstName.toUpperCase();
              }
      
              while (!firstName.matches("^[a-zA-Z,.'-]+$"));
      
              System.out.println("Thanks " + firstName);
      
          }
      }
      

      【讨论】:

      • 空白区域怎么样。这就是我卡住的地方。
      • 如果你将我的正则表达式复制粘贴到 rubular 中,并尝试用空格写一个名字,它会告诉你它不匹配 :D
      • O_o.你确定你已经照原样复制了我的正则表达式吗?
      • 'do { System.out.println("请输入您的名字:");名字 = 键盘.next(); firstName=firstName.toUpperCase(); } while( !firstName.matches("^[a-zA-Z,.'-]+$")); System.out.println("谢谢" + firstName);'
      • 欢迎。该程序将帮助您生成报告...请输入您的名字:p p 谢谢 P
      【解决方案5】:

      试试

      firstName =  firstName.replaceAll("[\\d\\s]", "").toUpperCase();
      

      【讨论】:

        【解决方案6】:

        你可以试试这个。使用Rubular.com 创建它。

        Pattern nameRequirment = Pattern.compile("^((?!.[\\d\\s]).)*$");
        
        while (!nameRequirement.matcher(myString).matches()){
          //... prompt for new name
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多