我正在尝试验证用户输入的电话号码(在我的项目中)。这是我创建的方法,试图验证它,并给他们3次尝试输入有效的格式。然而,我无法让它返回提示,告诉他们重新输入它只运行它的数字是真还是假。我哪里错了。
public static boolean getPhoneInput(String phone) {
int count =0;
String input,
inputString = phone;
input = JOptionPane.showInputDialog( phone );
String pattern="(\\d-)?(\\d{3}-)?\\d{3}-\\d{4}";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(inputString);
while ((phone != null && input.length() == 0) && (count <2)){
input = JOptionPane.showInputDialog("No input was detected \n" + phone);
count++;}
if (count==2){
JOptionPane.showMessageDialog(null, " Sorry due to errors your order cannot be processed. GOODBYE.");
System.exit(0); {
}
}
return false;}
我尝试使用我找到的示例并为我的程序修改它。我不确定如果将字段留空或者格式无效,如何让布尔类型返回消息。
我能够使用getPhoneInput()方法让我的代码中的所有内容像魅力一样工作,但是有一种方法可以使用布尔值返回除true或false之外的其他内容。我明白这是它的构建,但是一旦我有正确的格式,我希望将数字写入txt文件。因为它现在工作,而不是记录用户名称的数字,它只是告诉我他们的电话号码符合所需的格式或它没有真或假。
答案 0 :(得分:1)
我没有对此进行过彻底的测试,但它应该适合你:
public static boolean getPhoneInput(String displayText)
{
int count = 0;
String input;
input = JOptionPane.showInputDialog(displayText);
String pattern = "\\d-(\\d{3})-(\\d{3})-(\\d{4})";
Pattern p = Pattern.compile(pattern);
while ((displayText != null && input.length() == 0))
{
input = JOptionPane.showInputDialog("No input was detected \n" + displayText);
count++;
if (count == 2)
{
JOptionPane.showMessageDialog(null, " Sorry due to errors your order cannot be processed. GOODBYE.");
System.exit(0);
}
}
count = 0;
while (count <= 3)
{
count++;
Matcher m = p.matcher(input);
if (m.matches())
return true;
else
input = JOptionPane.showInputDialog("Input in wrong format. \n" + displayText);
}
return false;
}
所做的更改:
if
语句移至while
循环内,更改了while
条件,如果if
为2,count
语句将导致循环退出?
)Matcher m = p.matcher(input);
移至方法的结尾,否则初始空输入将始终返回false
。inputString
是多余的。if
后面有一组额外的括号,没有任何明显的用途。我还想指出,您可能不应该将此正则表达式用于任何真实世界的应用程序,因为它只验证一种非常具体的电话号码形式。