java - 为什么电话号码验证没有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");
解决方案
问题在于以下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
推荐阅读
- c# - 如何在 C# 中强制使用默认参数值(跳过可选参数)?
- graphics - 为什么使用渲染缓冲区作为颜色附件?(OpenGL ES 2.0)
- php - 如何在控制器上使用 laravel 护照显示当前用户的数据库列表
- python - 模拟 Python shell 的“返回值”行为
- arduino - 如何将字节数组格式化为 Modbus 帧的 16 位 CRC 校验?
- c++ - 您选择的 CPU 不支持 x86-64 指令集
- matlab - 如何在给定条件的情况下递归地编辑矩阵?
- python - 仅使用梯度幅值图像计算梯度方向
- php - laravel 中的密码恢复
- java - JPA 对一对一关系的级联操作