2015-03-26 1 views
1

У меня есть номер телефона, который человек вводит в нашу программу. Мы не проверяем номера на стороне пользователя (не спрашивайте ...). Итак, я использовал RegEx для удаления всех иностранных символов и сравнения с другим RegEx (это то, чего хочет босс).StringBuilder, Подстрока не работает, если строка слишком короткая

Как только я создал простую строку для этого номера, я вручную помещаю дефисы в строку, чтобы наша база данных могла использовать ее для сравнения.

К сожалению, когда пользователь помещает письмо в строку, строка сокращается на один символ, заставляя мою подстроку выдавать ошибку. Как бы вы переписали этот код (я думаю, что «если» заявление, но, будучи тем, что я довольно новичок в этом, и я не хочу раздувать код, я на самом деле не доверяю себе на этом этапе.)

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, и это было не то, что я искал.

UPDATE:

Ожидаемый результат - будет по-прежнему работать с менее чем 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 + "%' "; 

Спасибо всем за помощь!

+3

Так что вы хотите, чтобы это сделать * с более коротким текстом? Пример ввода, ожидаемый результат и то, что вы пробовали, все это помогло бы ... –

+0

Ваше обновление («все равно будет работать») не отвечает на вопросы. Что должен сделать код для строки 'phone', если он меньше заданного количества символов? – CodeCaster

+2

Нет смысла использовать 'StringBuilder', если вы просто собираетесь объединить строки, которые вы передаете в один вызов' Append'. – juharr

ответ

2

Я бы избегал 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; 
+0

Не могли бы вы также объяснить, почему вы не использовали StringBuilder? –

+0

@ KevinFischer StringBuilder делает это, когда вы объединяете множество данных, чтобы иметь преимущество в производительности. В этом случае у вас есть строка из 10 символов - любые комментарии по подходу? – fubo

+0

Хорошо, это имеет смысл. спасибо –

4

Вы не указали, что должен делать код, если очищенная строка не соответствует ожидаемой длине.

Похоже, вы ожидаете, что очищенное число должно составлять 10 символов (6 + 4). Затем вы можете исправить это, например, выбросив исключение:

telephone = Regex.Replace(telephone, "[^0-9.]", ""); 
if (telephone.Length != 10) 
{ 
    throw new ArgumentException("Phone number length incorrect"); 
} 

И здесь не используется какое-либо строковое построение.

+1

string.Format часто выглядит более чистым: 'string.Format (" {0} - {1} - {2} ", telephone.Substring (0, 3), telephone.Substring (3, 3), telephone.Substring (6 , 4)); ' – ibiza

+0

Я действительно не хочу, чтобы это исключало исключение. Я все еще хочу, чтобы он работал с менее чем 10 числами. –

+0

Я все еще хочу, чтобы он заполнил нашу форму/фильтр. Я обновил свой первоначальный вопрос. Надеюсь, что это прояснится. –

 Смежные вопросы

  • Нет связанных вопросов^_^