如果字符串太短,子字符串将不起作用
Substring will not work if the string is too short
我有一个人输入我们程序的电话号码。我们不在用户端验证数字(不要问...)。所以我做的就是用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 个号码)。我们的 table 仍将填充这些选项。我们在面板上还有其他过滤功能,因此根据 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 + "%' ";
谢谢大家的帮助!
如果清理后的字符串与预期长度不匹配,您没有告诉代码应该做什么。
您似乎希望清理后的号码长度为 10 个字符 (6 + 4)。然后你可以通过抛出异常来修复它:
telephone = Regex.Replace(telephone, "[^0-9.]", "");
if (telephone.Length != 10)
{
throw new ArgumentException("Phone number length incorrect");
}
这里的 stringbuilder 没有任何用处。
我会在这里避免使用 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;
我有一个人输入我们程序的电话号码。我们不在用户端验证数字(不要问...)。所以我做的就是用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 个号码)。我们的 table 仍将填充这些选项。我们在面板上还有其他过滤功能,因此根据 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 + "%' ";
谢谢大家的帮助!
如果清理后的字符串与预期长度不匹配,您没有告诉代码应该做什么。
您似乎希望清理后的号码长度为 10 个字符 (6 + 4)。然后你可以通过抛出异常来修复它:
telephone = Regex.Replace(telephone, "[^0-9.]", "");
if (telephone.Length != 10)
{
throw new ArgumentException("Phone number length incorrect");
}
这里的 stringbuilder 没有任何用处。
我会在这里避免使用 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;