使用正则表达式判断是否是手机号

本文将教会你如何使用Java正则表达式来判断一个字符串是否是合法的手机号。我们将通过以下流程图来展示整个判断流程。

flowchart TD
    start(开始)
    input(输入手机号)
    step1(去除前后空格)
    step2(去除所有非数字字符)
    step3(判断长度是否为11)
    step4(判断是否以1开头)
    step5(判断是否全为数字)
    valid(合法手机号)
    invalid(非法手机号)
    
    start --> input --> step1 --> step2 --> step3 --> step4 --> step5
    step5 -- 是 --> valid
    step5 -- 否 --> invalid
    step4 -- 否 --> invalid
    step3 -- 否 --> invalid
    step2 -- 否 --> invalid
    step1 -- 否 --> invalid

现在我们来逐步解释每一步需要做什么,并提供对应的代码示例。

第一步:去除前后空格

用户可能会在输入时不小心输入了一些空格字符,我们首先需要将这些空格去除掉,只保留手机号码部分。

String phoneNumber = input.trim();

这里使用了String的trim()方法,该方法会去除字符串首尾的空格字符。

第二步:去除所有非数字字符

手机号码应该只包含数字字符,我们需要去除其中的非数字字符。

phoneNumber = phoneNumber.replaceAll("[^0-9]", "");

这里使用了String的replaceAll()方法,传入的第一个参数是一个正则表达式,表示所有非数字字符,第二个参数是一个空字符串,表示将匹配到的非数字字符替换为空。

第三步:判断长度是否为11

合法的手机号码长度应为11个字符,我们需要判断处理后的手机号码长度是否为11。

if (phoneNumber.length() != 11) {
    return false;
}

这里使用了String的length()方法,获取字符串的长度,并与11进行比较。

第四步:判断是否以1开头

中国的手机号码通常以1开头,我们需要判断手机号码是否以1开头。

if (!phoneNumber.startsWith("1")) {
    return false;
}

这里使用了String的startsWith()方法,传入的参数是一个字符串,表示需要判断的前缀。

第五步:判断是否全为数字

最后一步是判断处理后的手机号码是否全为数字字符。

if (!phoneNumber.matches("[0-9]+")) {
    return false;
}

这里使用了String的matches()方法,传入的参数是一个正则表达式,表示需要匹配的模式。[0-9]表示数字字符,+表示至少出现一次。

最后,如果经过了以上五步的判断,手机号码被认为是合法的。

return true;

完整代码示例

下面是完整的Java代码示例:

public class PhoneNumberValidator {
    public static boolean isPhoneNumberValid(String input) {
        String phoneNumber = input.trim();
        phoneNumber = phoneNumber.replaceAll("[^0-9]", "");
        
        if (phoneNumber.length() != 11) {
            return false;
        }
        
        if (!phoneNumber.startsWith("1")) {
            return false;
        }
        
        if (!phoneNumber.matches("[0-9]+")) {
            return false;
        }
        
        return true;
    }
}

你可以将上述代码保存为一个名为PhoneNumberValidator.java的文件,并在其他地方引入该类,然后调用isPhoneNumberValid()方法来判断手机号码的合法性。

String phoneNumber = "  13812345678  ";
boolean isValid = PhoneNumberValidator.isPhoneNumberValid(phoneNumber);
if (isValid) {
    System.out.println("手机号码合法");
} else {
    System.out.println("非法手机号码");
}

此时,如果手机号码合法,将会打印出"手机号码合法";否则,将会打印出"非法手机号码"。

希望本文能够帮助你理解并使用Java正则表达式判断手机号码的方法。如果有任何疑问,请随时提问。