2016-04-14 2 views
1

Я новичок в регулярном выражении У меня есть номер регулярного выражения телефона как (? \ D {3})? -? * \ Д {3} -? * -? \ d {4}Шаблон замены шаблона регулярных выражений для Phonenumber

Я пытаюсь замаскировать номер телефона, чтобы отображать только последние 4 цифры.

Я использую функцию Regex.Replace ("(123) 556-7890", "(? \ D {3})? -? * \ D {3} -? * -? \ D {4} "," # ")

Может кто-нибудь мне подскажет, какой будет образец замены.

Мне нужен комплект. Входные данные могут быть XML-или JSON

Входной
НомерТелефона> (123) 556-7890 НомерТелефона>

Выход НомерТелефона> (XXX) XXX-7890 НомерТелефона>

Входной
Номер телефона> 123 556 7890 Номер телефона>

Выход НомерТелефона> XXX XXX 7890 НомерТелефона>

Входной
НомерТелефона> (123) 556- 7890 НомерТелефона>

Выход НомерТелефона> (XXX) xxx- 7890 НомерТелефона>

ответ

2

Не могли бы вы просто сохранить последние 4 цифры с помощью \d{4}$, а затем прокомментировать предыдущие коды?:)

+0

var replaceString = Regex.Replace (" (754) 765-8769", "\ (? \ D { 3} \)? -? * \ Д {3} -? * -? \ d {4} "," ### - ## - \ d {4} $ "), результат - ### - ## - \ d {4} $ user3681378

+0

regexp: '([\ (? (\ d {0,3}) \)? \ s] + [- \ s]) (? = \ d {4})' заменить: 'XXX-XXX-' –

+0

Лучше '([\ (? (\ D {0,3}) \)? \ S] + [- \ s] +)' –

2

Если это всегда одинаковое количество цифр, вам нужно заменить? Разумеется, просто взяв последние четыре цифры и положив (XXX) XXX-, он достигнет того же результата?

string masked = "(XXX) XXX-" + input.Substring(input.Length - 4); 

Очевидно, что вы должны использовать оригинальное регулярное выражение, чтобы убедиться, что это действительный номер телефона.

+0

нет Флинн я не могу этого сделать потому что это общая функция, которая должна работать для SSN и т. д. на основе шаблонов – user3681378

1

Попробуйте

(\d)([() -]*)(\d)([() -]*)(\d)([() -]*)(\d)([() -]*)(\d)([() -]*)(\d)([() -]*)(\d+) 

Замена

x\2x\4x\6x\8x\10x\12\13 

Regex demo

Входной

Input 
PhoneNumber> (123) 556-7890 PhoneNumber> 

Output PhoneNumber>(XXX) XXX-7890 PhoneNumber> 

Input 
PhoneNumber> 123 556 7890 PhoneNumber> 

Output PhoneNumber>XXX XXX 7890 PhoneNumber> 

Input 
PhoneNumber> (123) 556- 7890 PhoneNumber> 

Output PhoneNumber>(XXX) XXX- 7890 PhoneNumber> 

Выход

Input 
PhoneNumber> (xxx) xxx-7890 PhoneNumber> 

Output PhoneNumber>(XXX) XXX-7890 PhoneNumber> 

Input 
PhoneNumber> xxx xxx 7890 PhoneNumber> 

Output PhoneNumber>XXX XXX 7890 PhoneNumber> 

Input 
PhoneNumber> (xxx) xxx- 7890 PhoneNumber> 

Output PhoneNumber>(XXX) XXX- 7890 PhoneNumber> 
+0

Regex.Replace (" (123) 556-7890", @ "(\ d) ([() -] *) (\ d) ([() -] *) (\ d) ([() -] *) (\ d) ([() -] *) (\ d) ([() -] *) (\ d) ([() -] *) (\ d +) "," x \\ 2x \\ 4x \\ 6x \\ 8x \\ 10x \\ 12 \\ 13 ") результат (x \ 2x \ 4x \ 6x \ 8x \ 10x \ 12 \ 13 user3681378

4

Вы можете использовать регулярное выражение, чтобы соответствовать любой цифре, которая не в течение последних 4-х цифр в конце строки, и заменить с X:

\d(?!\d{0,3}$) 

Explantion:

  • \d - соответствие цифры и ...
  • (?!\d{0,3}$) - провалить матч, если есть 0 до 3 цифр вправо в конце строки.

Смотрите regex demo и это C# demo:

var data = new string[] {"(123) 556-7890", "123 556 7890", "(123) 556- 7890"}; 
foreach (var s in data) { 
    Console.WriteLine(Regex.Replace(s, @"\d(?!\d{0,3}$)", "X")); 

Результаты:

(XXX) XXX-7890 
XXX XXX 7890 
(XXX) XXX- 7890 

UPDATE показывает, как использовать ВАШУ регулярное выражение в сочетании с моим

Вам просто нужно использовать ваше регулярное выражение соответствует номерам телефонов в r equired формата, и использовать мой маскировать цифры внутри матча оценщика:

var data = "I have this (123) 556-7890 phone number, followed with 123 556 7890, and (123) 556- 7890."; 
var res = Regex.Replace(data, @"\(?\d{3}\)?-? *\d{3}-? *-?\d{4}", 
       x => Regex.Replace(x.Value, @"\d(?!\d{0,3}$)", "X")); 
Console.WriteLine(res); 

См IDEONE demo

ПРИМЕЧАНИЯ что @"\(?\d{3}\)?-? *\d{3}-? *-?\d{4}\b" или @"\(?\d{3}\)?-? *\d{3}-? *-?\d{4}(?!\d)" может быть лучше модель для извлечения телефонных номеров в качестве последних 4 цифр не может за которым следует символ слова/незнака.

+0

awesome .. + 1 .. :) – rock321987

+0

он не работает, если вход " (123) 556-7890 "для этого входного ожидаемого значения: (XXX) XXX-8769 user3681378

+0

Не заменяйте XML напрямую. Разберите его соответствующими инструментами, а затем замените только обычный текст. конечно, вы можете заменить '$' '' '' или даже '' –

1

Эй проверить эту функцию просто указать номер телефона, который вы хотите, чтобы маскировать в качестве входных данных для функции и возвратит вас замаскированную строку

function maskPhoneNumber(phoneNumber) { 
 

 
\t var regularExpresion = /\(?\d{3}\)?-? *\d{3}-? *-?\d{4}/g, // regular expression to test phone numbers 
 
\t \t stringArray, 
 
\t \t maskString, 
 
\t \t lastString; 
 
\t 
 
\t // Check if given input matches the phone number pattern 
 
\t if(regularExpresion.test(phoneNumber)) { 
 
\t \t 
 
\t \t // split phone number to an array of characters to manipulate string 
 
\t \t stringArray = phoneNumber.split(""); 
 

 
\t \t /* 
 
\t \t * splice the array after reversing so that last 4 digits are seperated 
 
\t \t * Now stringArray will have last 4 digits and maskString will have remaining characters 
 
\t \t * 
 
\t \t */ 
 
\t \t maskString = stringArray.reverse().splice(4); 
 

 
\t \t // reverse and join the array to get last 4 digits without any change 
 
\t \t lastString = stringArray.reverse().join(""); 
 

 
\t \t // now replace the remaining characters where digits are present with "X" and then join the array 
 
\t \t // concat masked string with last 4 digits to get the required format 
 
\t \t phoneNumber = maskString.reverse().join("").replace(/\d/g,"X") + lastString; 
 
\t } 
 

 
\t return phoneNumber; 
 
}

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