为什么电话号码无需regEx就能在Java中给出无效代码进行验证

索引增量显示无效代码为什么会这样?在添加特殊字符条件之前,它工作正常,没有死代码显示,我也想验证特殊字符条件。

public class ValidatePhoneNumber {

void validatePhoneNumber(String pNumber) {

    // 1st Case - +91 9765463742 have to check for + sign
    boolean flag = false;
    String specialCharacter = "!@#$%^&*()-/`~:<>/?|=.,";
    if (pNumber.startsWith("+") && pNumber.length() == 14) {

        for (int index = 1; index < pNumber.length(); index++) {
            if ((Character.isDigit((pNumber.charAt(index))) || Character.isspaceChar((pNumber.charAt(index))))
                        && (!(specialCharacter.contains(Character.toString(pNumber.charAt(index)))))
                            && (!(Character.isLetter(pNumber.charAt(index))))) {
        
                flag = true;
            }
             else
                System.out.println(pNumber.charAt(index) + " " + pNumber + " Number is Invalid");
            flag = false;
            break;
        }
        if (flag == true) {
            System.out.println("Number " + pNumber + " is Valid");
        }
    }


public static void main(String[] args) {
    ValidatePhoneNumber phoneNumber = new ValidatePhoneNumber();
    phoneNumber.validatePhoneNumber("+91 975644@742");
    phoneNumber.validatePhoneNumber("09765463742");
iCMS 回答:为什么电话号码无需regEx就能在Java中给出无效代码进行验证

问题是由于以下break语句会在第一次迭代后立即中断for循环,因此index++将永远没有机会运行:

else
    System.out.println(pNumber.charAt(index) + " " + pNumber + " Number is Invalid");
flag = false;
break;

您应将其编写为:

void validatePhoneNumber(String pNumber) {
    // 1st Case - +91 9765463742 have to check for + sign
    boolean flag = false;
    int index;
    String specialCharacter = "!@#$%^&*()-/`~:<>/?|=.,";
    if (pNumber.startsWith("+") && pNumber.length() == 14) {
        for (index = 1; index < pNumber.length(); index++) {
            if (!(Character.isDigit(pNumber.charAt(index)) || Character.isSpaceChar(pNumber.charAt(index)))
                    && (specialCharacter.contains(Character.toString(pNumber.charAt(index)))
                            || Character.isLetter(pNumber.charAt(index)))) {
                flag = true;
                break;
            }
        }
    } else {
        flag = true;
    }
    if (!flag) {
        System.out.println("Number " + pNumber + " is Valid");
    } else {
        System.out.println(pNumber + " Number is Invalid");
    }
}

请注意,我已将System.out.println(pNumber.charAt(index) + " " + pNumber + " Number is Invalid");移出了循环,因此该消息仅被打印一次。

测试代码:

ValidatePhoneNumber phoneNumber = new ValidatePhoneNumber();
phoneNumber.validatePhoneNumber("+91 975644@742");
phoneNumber.validatePhoneNumber("+91 9765463742");

输出:

+91 975644@742 Number is Invalid
Number +91 9765463742 is Valid
本文链接:https://www.f2er.com/1989908.html

大家都在问