我是regex的新手 我有电话号码正则表达式模式(?\ d {3})? - ? * \ d {3} - ? * - ?\ d {4}
我试图屏蔽电话号码,只显示最后4位数字。
我正在使用函数Regex.Replace(“(123)556-7890”,“(?\ d {3})? - ?* \ d {3} - ?* - ?\ d {4}” ,“#”)
有人会帮助我替换模式。
我需要出类似的。输入可以是XML或JSON
输入
******中国> (123)556-7890 PhoneNumber>
输出 PhoneNumber>(XXX)XXX-7890 PhoneNumber>
输入
******中国> 123 556 7890 PhoneNumber>
输出 PhoneNumber> XXX XXX 7890 PhoneNumber>
输入
******中国> (123)556-7890 PhoneNumber>
输出 PhoneNumber>(XXX)XXX- 7890 PhoneNumber>
答案 0 :(得分:5)
您可以使用正则表达式匹配字符串末尾不在最后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
更新显示如何结合我的正则表达式
您只需要使用正则表达式匹配所需格式的电话号码,并使用我的屏蔽匹配评估器中的数字:
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位数字后面不能包含字/非数字字符。
答案 1 :(得分:2)
试试这个
(\d)([() -]*)(\d)([() -]*)(\d)([() -]*)(\d)([() -]*)(\d)([() -]*)(\d)([() -]*)(\d+)
换人
x\2x\4x\6x\8x\10x\12\13
输入
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>
答案 2 :(得分:2)
你不能简单地用\d{4}$
保存最新的4位数字,然后模拟以前的代码吗? :)
答案 3 :(得分:1)
如果它的数字位数始终相同,您是否需要更换?当然只是取了最后四位数并将(XXX) XXX-
放在它前面会得到相同的结果吗?
string masked = "(XXX) XXX-" + input.Substring(input.Length - 4);
显然,您仍然应该使用原始的正则表达式来确保它首先是有效的电话号码。
答案 4 :(得分:1)
嘿,请检查此功能,只需将您要屏蔽的电话号码作为该功能的输入,它将返回屏蔽的字符串
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;
}