.*?
вероятно, что вызывает у вас проблемы. Это не будет соответствовать ничего, вплоть до всего, но так мало, как требуется, чтобы получить совпадение. Но нет никаких ограничений на то, какие символы он будет принимать (.
соответствует чему угодно).
Выражение не должно принимать $,&,%,!,{,},(,).*
в адресе gmail
Тогда вам понадобится что-то вроде (?![$&%!{}()*])
в вашем регулярном выражении. Это не фиксирующий отрицательный взгляд, который не подтвердит, что ни один из перечисленных символов не найден.
, которые принимают -
и _
, но не последовательно
Вы можетедобавьте -
и _
к принимающему регулярному выражению и проверьте наличие дубликатов отдельно. Предполагая адрес электронной почты в emailAddress
, что-то вроде
var validation = "^(?![$&%!{}()*])[a-z0-9_-]+@gmail.com";
var containsDuplicates = emailAddress.IndexOf("--") > -1 && emailAddress.IndexOf("__") > -1;
var isValid = Regex.IsMatch(emailAddress, validation) && !containsDuplicates;
Теперь, это не будет работать на допустимых адресах Gmail, таких как адреса, содержащие один или несколько периодов, но это кажется отдельной проблемой.