Я пытаюсь заменить 123456789
с ************3456
следующим кодом:Почему это Regex.Replace не работает должным образом?
Regex.Replace(xml,@"\b\d{13,16}\b", string.Concat(new String('*',12),a.Value.Substring(a.Value.Length - 4)));
Где a.Value
это число, но это только приводит к:
****************
Полный код:
//Check if value is the credit card
if(a.Value.Length >= 13 && a.Value.Length <= 16)
xml = Regex.Replace(xml,@"\b\d{12}(?=\d{4})\b", new String('*',12));
else //If value is not a credit card, replace it with ***
xml = Regex.Replace(xml,@"\b\d+\b", "***");
Я заменил первую часть оператора if:
Regex.Replace(xml, @"\b\d{13,16}\b", match =>
String.Concat(new String('*', match.Length - 4), match.Value.Substring(match.Length - 4)));
но я все еще получаю ***
для cardnum.
Адрес электронной почты: XML. Обратите внимание, что номер карты может быть от 13 до 16 цифр, и я всегда хочу, чтобы последний 4.
<Details>
<CreditCard cardnum='123456789'
ccv='123'
exp='0212'
cardType='1'
name='joe' />
</Details>
длинные числовые;
string xml = @"<Details>
<CreditCard cardnum='123456789'
ccv='123'
exp='0212'
cardType='1'
name='joe' />
</Details>";
XElement element = XElement.Parse(xml);
IEnumerable<XElement> elementsWithPossibleCCNumbers =
element.Descendants()
.Where(d => d.Attributes()
.Where(a => a.Value.Length >= 13 && a.Value.Length <= 16)
.Where(a => long.TryParse(a.Value, out numeric))
.Count() == 1).Select(x=>x);
foreach(var x in elementsWithPossibleCCNumbers)
{
foreach(var a in x.Attributes())
{
//Check if the value is a number
if(long.TryParse(a.Value,out numeric))
{
//Check if value is the credit card
if(a.Value.Length >= 13 && a.Value.Length <= 16)
Regex.Replace(xml,@"\b\d{12}(?=\d{4}\b)", new String('*',12));
else //If value is not a credit card, replace it with ***
xml = Regex.Replace(xml,@"\b\d+\b", "***");
}
}
}
Ваше регулярное выражение просит '{13,16}' цифр, так как он не работает должным образом, когда ваша строка имеет 16 цифр? – BoltClock
@BoltClock - Извините, не хорошо с регулярным выражением, но у меня было ощущение, что это что-то в этом роде. В принципе, мне нужно сопоставить число, которое составляет 13-16 цифр, но заменять все, кроме последних 4 символов. – Xaisoft
Я не верю в регулярное выражение, оно работает, когда я его тестирую – msmucker0527