Неизвестная управляющая последовательность — Регулярное выражение

Я хочу проверить текст электронной почты, для которого я использую RegexKitLite.h. Я делаю следующее:

NSString *strEmail = [txtEmail text];
                NSRange range = [strEmail rangeOfRegex:@"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"];
                NSLog(@"%@",range);  

Пока просто проверяю, работает ли это. Но я получаю ошибку во второй строке. Лог ничего не говорит. Но во второй строке есть предупреждение:

Unknown escape sequence '\.'  

В чем может быть проблема? Что-то не так в выражении или есть какая-то другая проблема?


person Nitish    schedule 25.07.2011    source источник


Ответы (1)


Вам не нужно избегать точки в классе символов. Большинство движков регулярных выражений игнорируют такого рода ошибки, Objective C кажется более строгим. Попробуй это:

rangeOfRegex:@"^[a-zA-Z][\w.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z.]*[a-zA-Z]$"

Однако (и не связанное с проблемой) это довольно странное регулярное выражение проверки электронной почты, поскольку оно будет отклонять многие действительные адреса электронной почты и разрешать многие недействительные. Я не знаю, к чему вы здесь стремитесь, но, как правило, хорошей идеей является не быть слишком строгим с проверкой регулярных выражений, а выполнять проверку, фактически отправив электронное письмо на этот адрес, и посмотреть, не сработает ли это.

person Tim Pietzcker    schedule 25.07.2011
comment
Все еще получаю это предупреждение. Сбой происходит, когда я регистрирую диапазон. - person Nitish; 25.07.2011
comment
Хм. Что произойдет, если вы используете \\. в одном месте, где все еще есть экранированная точка? - person Tim Pietzcker; 25.07.2011
comment
Кроме того, как я могу удалить это предупреждение? - person Nitish; 25.07.2011