为什么我的正则表达式不起作用? [Java] [正则表达式] [空格问题]

Why my regex is not working ? [Java] [Regex] [Whitespaceproblem]

我定义了一个正则表达式来接受手机号码。

例如:90 9121312333

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UserRegistrationProblem 
{
    public static void main(String[] args) 
    {
        System.out.println("Enter Mobile Number");
    
        Scanner sc = new Scanner(System.in);
        String mobile = sc.next();
    
        Pattern pattern = Pattern.compile("^[0-9]{2}\s[0-9]{10}$");
        Matcher matcher = pattern.matcher(mobile);
    
        if (matcher.matches())
        {
            System.out.println("Valid Mobile Number");
        }
        else
        {
            System.out.println("Invalid Mobile Number");
        }
    }
}

所以,它不起作用。

空格有问题。

我查找了语法,它是正确的。

sc.next() 正在阅读 "90".
要查看它,请在读取数字后添加 System.out.println(">" + mobile + "<");
更好的是,至少在出现错误的情况下,向用户展示错误的原因:

System.out.println("Invalid Mobile Number: \"" + mobile + "\"");

这将对用户(最终对开发者有帮助!)

文档:

A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace.

next():Finds and returns the next complete token from this scanner.

您可能想使用 nextLine() 读取整个输入


注意:使用 Matcher.matches() 时无需使用 ^$ - 这总是测试完整输入是否与表达式匹配(Matcher.find() 不正确) .