2017-02-22 23 views
3

Я пытаюсь использовать валидатор регулярных выражений. Фокус в том, что для этого может потребоваться больше логики, но я надеялся, что смогу выполнить это с помощью регулярного выражения. Поэтому, если строка для тестирования заканчивается @ faxmail.com, она также должна начинаться с «1». В противном случае, по существу, все, что не заканчивается на @ faxmail.com, является совпадением. Так что, если я сделал это только с C# это может выглядетьСложный Valid Regex Validator

if(someString.EndsWith("@faxmail.com")) 
{ 
    if(!someString.StartsWith("1,")) return false; 
} else { 
    return true; 
} 

Я пытался что-то вроде (?(?=^(\w+)@faxmail.com$)(^1))) и частично работает. В конце концов, мне нужно что-то вроде:

1,[email protected] (passes) 
[email protected] (fails) 
[email protected] (passes) 

Это то, что я пытаюсь достичь возможно с помощью регулярных выражений или мне просто нужно выбивать и использовать # логику C?

ответ

2

Вы можете попробовать этот Regex:

Regex regex = new Regex(@"^1.*(@faxmail.com)$|.*(?<[email protected])$"); 

Есть два регулярных выражений, чтобы соответствовать здесь:

  1. начинается с 1, а затем с помощью любых символов, и заканчивая "@ faxmail.com", или
  2. Любая строка не заканчивается на «@ faxmail.com»

Вы можете использовать ниже тестов для проверки:

Regex regex = new Regex(@"^1.*(@faxmail.com)$|.*(?<[email protected])$"); 
Console.WriteLine(regex.IsMatch("1,[email protected]")); //True 
Console.WriteLine(regex.IsMatch("[email protected]")); //False 
Console.WriteLine(regex.IsMatch("[email protected]")); //True 
Console.WriteLine(regex.IsMatch("[email protected]@testmail.com")); //True 
Console.WriteLine(regex.IsMatch("2,[email protected]")); //False 
+1

Wow this works great! Благодарю. Дело только в том, что 2-й к последнему тестовому примеру (faxmail @ faxmai.com @ testmail.com) реалистично не должен проходить, потому что наш факс-сервер, вероятно, задохнется. Поэтому мне, вероятно, придется внести некоторые коррективы и продолжить тестирование. Но это поставит меня в правильном направлении. Еще раз спасибо! – Colin

+0

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

+0

Да. Это на самом деле было частью моего плана, используя атрибут EmailAddressAttribute, а также полученный RegexAttribute. – Colin