Wzór zastępowania maski numeru telefonu Regex


Jestem nowy w regex
Mam wzorzec wyrażenia regularnego numeru telefonu w postaci (? \ D {3})? -? * \ d {3} -? * -? \ d {4}
Próbuję zamaskować numer telefonu, aby wyświetlał tylko ostatnie 4 cyfry.
Używam funkcji Regex.Replace ("(123) 556-7890", "(? \ D {3})? -? * \ D {3} -? * -? \ D {4}", "# ")
Czy ktoś mógłby mi pomóc, jaki byłby wzór wymiany.
Muszę wyjść, jak na. Dane wejściowe mogą być w formacie XML lub JSON

Wejście
PhoneNumber> (123) 556-7890 PhoneNumber>

Wyjście

PhoneNumber>(XXX) XXX-7890 PhoneNumber>

Wejście
PhoneNumber> 123 556 7890 PhoneNumber>

Wyjście

PhoneNumber>XXX XXX 7890 PhoneNumber>

Wejście
PhoneNumber> (123) 556- 7890 PhoneNumber>

Wyjście

PhoneNumber>(XXX) XXX- 7890 PhoneNumber>
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz użyć wyrażenia regularnego, aby dopasować dowolną cyfrę spoza ostatnich 4 cyfr na końcu ciągu i zastąpić ją
X
:
\d(?!\d{0,3}$)
Wyjaśnienie

:
  • \ d
    - dopasuj cyfrę ORAZ ...
  • (! \ d {0,3} $)
    - nie można dopasować, jeśli na końcu ciągu znajduje się od 0 do 3 cyfr.

Widzieć

próbny
https://regex101.com/r/nJ2vY5/2
-wersja wyrażenia regularnego i to

próbny
http://ideone.com/pC9Adj
-wersja C #:
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"));

Wyniki:
(XXX) XXX-7890
XXX XXX 7890
(XXX) XXX- 7890


UPDATE pokazuje, jak używać TWOJEGO wyrażenia regularnego w połączeniu z moim

Wystarczy użyć regexa, aby dopasować numery telefonów w żądanym formacie i użyj kopalni, aby ukryć liczby wewnątrz rzeczoznawcy zgodności:
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);

Widzieć

demonstracja
http://ideone.com/1hiJ4a
IDEONE

NOTE

co to jest
@ "\ (? \ d {3} \)? -? * \ d {3} -? * -? \ d {4} \ b"
lub
@ "\ (? \ d {3} \)? -? * \ d {3} -? * -? \ d {4} (?! \ d) "
mogą być lepszymi wzorcami wyodrębniania numerów telefonów, ponieważ po ostatnich 4 cyfrach nie może następować słowo/nie cyfra.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli zawsze ma tę samą liczbę cyfr, czy musisz dokonać zamiany? Z pewnością wystarczy wziąć ostatnie cztery cyfry i wstawić przed nimi
(XXX) XXX-
, aby uzyskać ten sam wynik?
string masked = "(XXX) XXX-" + input.Substring(input.Length - 4);

Oczywiście nadal powinieneś użyć oryginalnego wyrażenia regularnego, aby najpierw upewnić się, że jest to prawidłowy numer telefonu.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj tego
(\d)([() -]*)(\d)([() -]*)(\d)([() -]*)(\d)([() -]*)(\d)([() -]*)(\d)([() -]*)(\d+)

Zastąpienie
x\2x\4x\6x\8x\10x\12\13

Demo Regex
https://regex101.com/r/sJ3eF4/4
-wersja
Wejście
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>

Wyjście
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>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Czy możesz po prostu zapisać ostatnie 4 cyfry za pomocą
\ d {4} $
, a następnie zasymulować poprzednie kody? :)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Hej, sprawdź tę funkcję, po prostu podaj numer telefonu, który chcesz zamaskować jako dane wejściowe do funkcji, a zwróci ci zamaskowany ciąg
<div class="snippet-code">
<div class="snippet" data-hide="false" data-lang="js">
<pre class="snippet-code-js lang-js prettyprint-override">
function maskPhoneNumber(phoneNumber) { var regularExpresion =/\(?\d{3}\)?-? *\d{3}-? *-?\d{4}/g,// regular expression to test phone numbers
stringArray,
maskString,
lastString;

// Check if given input matches the phone number pattern
if(regularExpresion.test(phoneNumber)) {

// split phone number to an array of characters to manipulate string
stringArray = phoneNumber.split("");/*
* splice the array after reversing so that last 4 digits are seperated
* Now stringArray will have last 4 digits and maskString will have remaining characters
*
*/
maskString = stringArray.reverse().splice(4);// reverse and join the array to get last 4 digits without any change
lastString = stringArray.reverse().join("");// now replace the remaining characters where digits are present with "X" and then join the array
// concat masked string with last 4 digits to get the required format
phoneNumber = maskString.reverse().join("").replace(/\d/g,"X") + lastString;
} return phoneNumber;
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się