您能否帮助我以下列格式为电话号码标记用户输入:xxx xxx-xxxx in first else if
正则表达式已经过验证,可以正常工作。我会把它包括在内。
按照我想要抓住的其余电话号码的相同程序 将前三个数字分成一个单独的变量,其余的数字连接起来。
这是代码
else if (ValidatePhone.validateSpaceAfterAreaCode(input)) {
StringTokenizer st = new StringTokenizer(input);
String token = st.nextToken("\\s").toString();
// firstdigits = new Long(st.nextToken("\\s")).toString();
phoneNumber = new Long(st.nextToken("-")).toString();
phoneNumber += new Long(st.nextToken("-")).toString();
num = Long.parseLong(phoneNumber);
JOptionPane.showMessageDialog(null, "first digits: " + token + "\nlast digits: " + num);
}
//WORKING for xxx.xxx.xxxx
else if (ValidatePhone.validateAllPeriods(input)) {
StringTokenizer st = new StringTokenizer(input);
firstdigits = new Long(st.nextToken(".")).toString();
phoneNumber = new Long(st.nextToken(".")).toString();
phoneNumber += new Long(st.nextToken(".")).toString();
num = Long.parseLong(phoneNumber);
JOptionPane.showMessageDialog(null, "first digits: " + firstdigits + "\nlast digits: " + num);
}
这是验证手机类中的功能
public static boolean validateSpaceAfterAreaCode(String acspace)
{
return acspace.matches("^[1-9]\\d{2}\\s\\d{3}-\\d{4}");
}
答案 0 :(得分:1)
你正在使它变得比它需要的复杂得多。我猜猜允许的形式是
nnn nnn-nnnn
nnn-nnn-nnnn
nnn.nnn.nnnn
并且您不希望允许其他变体,例如nnn nnn.nnnn
或nnn.nnn-nnnn
。试试这个
Pattern p1 = Pattern.compile("([2-9]\\d{2})([-.])(\\d{3})\\2(\\d{4})");
Pattern p2 = Pattern.compile("([2-9]\\d{2})(\\s)(\\d{3})-(\\d{4})");
Matcher m = p1.matcher(input);
if (!m.matches())
m = p2.matcher(input)
if (m.matches()
{
// results are in m.group(1), m.group(3) and m.group(4)
}
else
{
// input didn't match
}
说明:
p1
([2-9]\\d{2}) - Areacode (first digit must be 2-9)
([-.]) - Delimiter, either a dot or hyphen
(\\d{3}) - The 3-digit exchange
\\2 - Back-reference to the first delimiter
(\\d{4}) - The 4-digit number
反向引用使正则表达式匹配匹配的第一个分隔符。
模式p2很简单,除了我将捕获括号放在第一个分隔符周围,因此数字组的索引在两种情况下都是相同的,从而无需检查匹配的模式。
答案 1 :(得分:0)
我会把它分开:
String parts = input.split("\\D+");
使用任何非数字序列进行拆分,并创建一个大小为3的数组,然后您可以将其解析为整数等。