Я создаю отчет с помощью SSRS для поля номера телефона в моей базе данных как строковое значение. Я должен отформатировать строковое значение в формате телефонного номера (555) 555-1212. Если значение является нулевым, ничего не отобразите.
Например, таблица в моей базе данных имеет столбец номера телефона, и некоторые значения являются НУЛЕВЫМИ.
Я получил regex, который форматирует прекрасный номер телефона.
=System. Текст. RegularExpressions. Regex. Замена (Поля! Телефон. Значение, "(\d {3}) [-]. (\d {3}) [-]. (\d {4})"", дюйм за $2-3 (1$))
Однако, если я делаю это:
=IIf (Поля! Телефон. Значение - ничто, "", Система. Текст. RegularExpressions. Regex. Замена (Поля! Телефон. Значение", (\d {3}) [-]. (\d {3}) [-]. (\d {4})"", дюйм за $2-3 (1$)))
Затем это возвращается с ошибкой. #ERROR отображен на моем отчете. Можно ли использовать iif с regex? Есть ли иначе?
(Я предполагаю, что вы получаете #ERROR только для ваших записей с нулевым значением, поскольку именно это и произошло, когда я настроил тестовый пример, используя указанное вами выражение. Если нет, Я буду исследовать дальше.)
Вы, конечно, можете использовать регулярное выражение внутри оператора IIF ()
, но оно оценивает оба условия результата независимо от результата вашего тестового выражения . Следовательно, ваш Regex.replace ()
также выполняется для ваших значений NULL
, что, естественно, вызывает ошибку.
Мне удалось добиться того же поведения, которое, как я думаю, вам нужно, немного изменив порядок вещей, чтобы вместо этого у нас было это выражение (отформатированное для удобочитаемости):
=System.Text.RegularExpressions.Regex.Replace(
IIf(IsNothing(Fields!Phone.Value), "", Fields!Phone.Value),
"(\d{3})[ -.](\d{3})[ -.](\d{4})",
"($1) $2-$3")
Это даст вам пустое поле, когда значение будет NULL
, в противном случае ваши телефонные номера будут отформатированы соответствующим образом. Надеюсь, это поможет.