我有2个列表,如下所示:
valuesToMatch = ["someemail@something.com", "123-45-6789"]
regexValuesToMatchWith = ["^[a-zA-Z0-9._%+-]+@[a-z0-9-]+\.(com|org|edu|)(\.[a-z]{2,3})?", "^\d{3}-\d{2}-\d{4}$"]
我想将带有电子邮件正则表达式的电子邮件与带有SSN正则表达式的SSN编号匹配。如果两者都正确,那么只有我可以添加数据,否则不能添加。
public bool MatchRegex(Data data)
{
var regexMatch = false;
var valuesToMatch = GetValuesToMatch(data.values);
var regexValuesToMatchWith = service.Validations(data.id);
foreach (var toMatch in valuesToMatch)
{
foreach (var withRegex in regexValuesToMatchWith)
{
var r = new Regex(withRegex, RegexOptions.IgnoreCase);
if (r.IsMatch(toMatch))
{
regexMatch = true;
}
}
}
if (regexMatch)
{
return dbContext.Add(data);
}
return false;
}
我已经在线研究了方法,但是不确定是否可以实现。
答案 0 :(得分:3)
也许for
循环更适合您要实现的目标。
bool regexMatch = true;
for (int i = 0; i < withRegex.Length; i++)
{
var r = new Regex(valuesToMatch[i], RegexOptions.IgnoreCase);
if (!r.IsMatch(regexValuesToMatchWith[i]))
{
regexMatch = false;
break;
}
}
}
foreach
循环将比较每个值与email和SSN regex,这是不必要的。除此之外,如果像您所做的那样将regexMatch
设置为true,即使其中一个比较不匹配也将是true。
根据您的示例,我假设valuesToMatch
和regexValuesToMatchWith
的大小始终相同,并且数据顺序正确。