我有一个人在我们的计划中输入的电话号码。我们不会在用户端验证号码(不要问......)。所以我所做的是使用RegEx剥离所有外国字符并与另一个RegEx进行比较(这是老板想要的)。
一旦我为这个数字创建了一个普通字符串,我手动将连字符放入字符串中,这样我们的数据库就可以用它来进行比较。
不幸的是,当用户在字符串中放置一个字母时,字符串会缩短一个字符,这会使我的Substring抛出错误。你会如何重写这段代码(我在思考"如果"陈述但是我对这个很新,而且我不想夸大代码,我不会# 39;在这一点上我真的相信自己。)
telephone = Regex.Replace(telephone, "[^0-9.]", "");
StringBuilder sb = new System.Text.StringBuilder();
sb.Append(telephone.Substring(0, 3)
+ "-" + telephone.Substring(3, 3)
+ "-" + telephone.Substring(6, 4));
return sb.ToString();
我已经检查了link,但这并不是我想要的。
更新:
预期结果 - 仍然会以少于10个数字(包括少于4个或3个数字)运行。我们的表格仍将填充这些选项。我们在面板上有其他过滤功能,因此面板根据3位数字不会很大
用户只会获得一个更大的列表(这是基于公司协议)。 当我今天运行它时,程序只是挂起而没有更新我们的面板。我必须从VS重新启动调试器,因为我们无法退出程序。
答案:
这是一个混合的答案。我查看了我用于实际电话号码的那个:
telephone = Regex.Replace(telephone, "[^0-9.]", "");
if (telephone.Length > 3)
telephone = telephone.Insert(3, "-");
if (telephone.Length > 7)
telephone = telephone.Insert(7, "-");
return telephone;
然后我必须调整存储过程才能正常工作:
WHERE OfficePhone LIKE '%" + @newPhone + "%' ";
谢谢大家的帮助!
答案 0 :(得分:4)
如果清理后的字符串与预期长度不匹配,您没有说明代码应该做什么。
您似乎希望清理后的号码长度为10个字符(6 + 4)。然后你可以修复它,例如通过抛出异常:
telephone = Regex.Replace(telephone, "[^0-9.]", "");
if (telephone.Length != 10)
{
throw new ArgumentException("Phone number length incorrect");
}
这里的字符串构建器并没有什么用处。
答案 1 :(得分:3)
我会在这里避免使用StringBuilder。这种方法不会抛出ArgumentOutOfRangeException,如果你的号码有必要的长度,它会插入-
。
telephone = Regex.Replace(telephone, "[^0-9.]", "");
if (telephone.Length > 3)
telephone = telephone.Insert(3, "-");
if (telephone.Length > 7)
telephone = telephone.Insert(7, "-");
return telephone;