【发布时间】:2015-03-26 14:26:47
【问题描述】:
我有一个电话号码,有人将其输入到我们的程序中。我们不会在用户端验证数字(不要问......)。所以我所做的就是用 RegEx 去除所有外来字符并与另一个 RegEx 进行比较(这是老板想要的)。
一旦我为这个数字创建了一个纯字符串,我手动将连字符放入字符串中,以便我们的数据库可以使用它进行比较。
不幸的是,当用户在字符串中放置一个字母时,字符串会缩短一个字符,导致我的 Substring 抛出错误。你将如何重写这段代码(我在想“if”语句,但由于我对此很陌生,我不想夸大代码,所以我现在不太相信自己。)
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 + "%' ";
谢谢大家的帮助!
【问题讨论】:
-
那么你希望它用较短的文本做什么?示例输入、预期输出以及您尝试过的所有方法都会有所帮助...
-
您的更新(“仍将运行”)没有回答问题。如果
telephone字符串短于给定的字符数,代码应该如何处理? -
如果您只是要将传递给
Append的一次调用中的字符串连接起来,那么使用StringBuilder是没有意义的。 -
@KevinFischer 了解存储过程如何使用这些值可能有助于确定您需要什么,但我的直觉告诉我,存储过程可能必须更改才能正常工作。一般来说,我假设它会按照
where phoneNumber like '%' + filterNumber + '%' -
这是完全匹配的,除非您的数据库中有部分电话号码,否则我看不出如何在部分上进行匹配。