Проверка на имейл на textField в iOS

В приложението за iOS, как да добавите валидиране на имейл на UITextField?


person ios    schedule 25.03.2011    source източник
comment
ios-blog.co.uk /уроци/бързи съвети/   -  person yazh    schedule 07.11.2014


Отговори (13)


Използвайте NSPredicate и Regex:

- (BOOL)validateEmailWithString:(NSString*)email
{
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 
    return [emailTest evaluateWithObject:email];
}

За група имейли, разделени със запетая:

- (NSMutableArray*)validateEmailWithString:(NSString*)emails
{
    NSMutableArray *validEmails = [[NSMutableArray alloc] init];
    NSArray *emailArray = [emails componentsSeparatedByString:@","];
    for (NSString *email in emailArray)
    {
        NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
        NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 
        if ([emailTest evaluateWithObject:email])
            [validEmails addObject:email];
    }
    return [validEmails autorelease];
}

Редактиран отговор: (Също така потвърждава допълнителните точки)

- (BOOL)validateEmailWithString:(NSString*)checkString
{
    BOOL stricterFilter = NO; // Discussion http://blog.logichigh.com/2010/09/02/validating-an-e-mail-address/
    NSString *stricterFilterString = @"[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}";
    NSString *laxString = @".+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*";
    NSString *emailRegex = stricterFilter ? stricterFilterString : laxString;
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailTest evaluateWithObject:checkString];
}
person Rog    schedule 25.03.2011
comment
@Prerak вижте моя редактиран отговор по-горе. Това ще върне масив с всички валидни имейли. - person Rog; 25.03.2011
comment
Опитах се да тествам този регулярен израз с имейл адреса [email protected] (с две точки след provider) и той премина. Невалиден имейл адрес ли е? - person Eduardo Coelho; 27.06.2012
comment
как да ограничите потребителя да въвежда имейла си само като @gmail.com в текстовото поле. - person venki; 14.05.2014
comment
@EduardoCoelho, ако случаят е такъв, стартирайте замяна на низ, преди да опитате да потвърдите. emailString = [emailString stringByReplacingOccurrencesOfString:@.. withString:@.]; - person Louie; 09.08.2014
comment
също ' е валиден знак в имейл адрес. Регулярният израз трябва да бъде "[A-Z0-9a-z'._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" - person Luca Torella; 05.09.2016
comment
' ' [празно място] в emailId не се разпознава като неправилен имейл, добре ли е? - person Bhavik Rathod; 28.09.2017
comment
Какво ще се случи, ако имате китайски йероглифи в имейла си? - person delta2flat; 07.05.2019

Изпробвайте това
Това проверява точно с имена на домейни от първо ниво заедно с проверка.


- (BOOL)validateEmail:(NSString *)inputText {
    NSString *emailRegex = @"[A-Z0-9a-z][A-Z0-9a-z._%+-]*@[A-Za-z0-9][A-Za-z0-9.-]*\\.[A-Za-z]{2,6}"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 
    NSRange aRange;
    if([emailTest evaluateWithObject:inputText]) {
        aRange = [inputText rangeOfString:@"." options:NSBackwardsSearch range:NSMakeRange(0, [inputText length])];
        int indexOfDot = aRange.location;
        //NSLog(@"aRange.location:%d - %d",aRange.location, indexOfDot);
        if(aRange.location != NSNotFound) {
            NSString *topLevelDomain = [inputText substringFromIndex:indexOfDot];
            topLevelDomain = [topLevelDomain lowercaseString];
            //NSLog(@"topleveldomains:%@",topLevelDomain);
            NSSet *TLD;
            TLD = [NSSet setWithObjects:@".aero", @".asia", @".biz", @".cat", @".com", @".coop", @".edu", @".gov", @".info", @".int", @".jobs", @".mil", @".mobi", @".museum", @".name", @".net", @".org", @".pro", @".tel", @".travel", @".ac", @".ad", @".ae", @".af", @".ag", @".ai", @".al", @".am", @".an", @".ao", @".aq", @".ar", @".as", @".at", @".au", @".aw", @".ax", @".az", @".ba", @".bb", @".bd", @".be", @".bf", @".bg", @".bh", @".bi", @".bj", @".bm", @".bn", @".bo", @".br", @".bs", @".bt", @".bv", @".bw", @".by", @".bz", @".ca", @".cc", @".cd", @".cf", @".cg", @".ch", @".ci", @".ck", @".cl", @".cm", @".cn", @".co", @".cr", @".cu", @".cv", @".cx", @".cy", @".cz", @".de", @".dj", @".dk", @".dm", @".do", @".dz", @".ec", @".ee", @".eg", @".er", @".es", @".et", @".eu", @".fi", @".fj", @".fk", @".fm", @".fo", @".fr", @".ga", @".gb", @".gd", @".ge", @".gf", @".gg", @".gh", @".gi", @".gl", @".gm", @".gn", @".gp", @".gq", @".gr", @".gs", @".gt", @".gu", @".gw", @".gy", @".hk", @".hm", @".hn", @".hr", @".ht", @".hu", @".id", @".ie", @" No", @".il", @".im", @".in", @".io", @".iq", @".ir", @".is", @".it", @".je", @".jm", @".jo", @".jp", @".ke", @".kg", @".kh", @".ki", @".km", @".kn", @".kp", @".kr", @".kw", @".ky", @".kz", @".la", @".lb", @".lc", @".li", @".lk", @".lr", @".ls", @".lt", @".lu", @".lv", @".ly", @".ma", @".mc", @".md", @".me", @".mg", @".mh", @".mk", @".ml", @".mm", @".mn", @".mo", @".mp", @".mq", @".mr", @".ms", @".mt", @".mu", @".mv", @".mw", @".mx", @".my", @".mz", @".na", @".nc", @".ne", @".nf", @".ng", @".ni", @".nl", @".no", @".np", @".nr", @".nu", @".nz", @".om", @".pa", @".pe", @".pf", @".pg", @".ph", @".pk", @".pl", @".pm", @".pn", @".pr", @".ps", @".pt", @".pw", @".py", @".qa", @".re", @".ro", @".rs", @".ru", @".rw", @".sa", @".sb", @".sc", @".sd", @".se", @".sg", @".sh", @".si", @".sj", @".sk", @".sl", @".sm", @".sn", @".so", @".sr", @".st", @".su", @".sv", @".sy", @".sz", @".tc", @".td", @".tf", @".tg", @".th", @".tj", @".tk", @".tl", @".tm", @".tn", @".to", @".tp", @".tr", @".tt", @".tv", @".tw", @".tz", @".ua", @".ug", @".uk", @".us", @".uy", @".uz", @".va", @".vc", @".ve", @".vg", @".vi", @".vn", @".vu", @".wf", @".ws", @".ye", @".yt", @".za", @".zm", @".zw", nil];
            if(topLevelDomain != nil && ([TLD containsObject:topLevelDomain])) {
                //NSLog(@"TLD contains topLevelDomain:%@",topLevelDomain);
                return TRUE;
            }
            /*else {
             NSLog(@"TLD DOEST NOT contains topLevelDomain:%@",topLevelDomain);
             }*/

        }
    }
    return FALSE;
}

person SNR    schedule 25.03.2011
comment
Във вашия набор от домейни от първо ниво има низ @ No. Мисля, че това не трябва да е там. Освен това в списъка ви липсват някои официални домейни от първо ниво, напр. нелатински такива. Вижте iana.org/domains/root/db за официалния списък на IANA. - person Florian; 14.05.2013
comment
@Florian: .no е валиден TLD. Използва се много в Норвегия. Той дори е посочен в ресурса, към който сте дали връзка. Напр.: www.google.no - person matsr; 08.11.2013
comment
Не говоря за @.no, а за @No. Той е точно след @.ie в списъка. - person Florian; 09.11.2013
comment
Това не е добра идея, това вече е остаряло, тъй като .bike и .ventures TDL и хиляди други вече са в продажба. - person jturolla; 11.02.2014
comment
страхотен отговор ... tnx много @SNR - person Ankur Kathiriya; 05.10.2015

Използвайте кода по-долу: -

NSString *emailRegEx = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];
//Valid email address

if ([emailTest evaluateWithObject:userMailTextField.text] == YES) 
{
     //Do Something
}
else
{
     NSLog(@"email not in proper format");
}

userMailTextField е името на моето textField (използвайте свое).

Надявам се този код да ви помогне!!!

person Gypsa    schedule 25.03.2011
comment
Благодаря за този пример! Наистина е страхотно! - person Genevios; 07.02.2017
comment
Мисля, че това трябва да е правилният отговор. Приетият отговор е неуспешен, ако има място в средата на имейл адреса. - person Seto; 13.08.2019

Използвайте кода по-долу за „Бърз език“ за имейл валидиране

func ValidateEmailString (strEmail:NSString) -> Bool
{
   let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
   let emailText = NSPredicate(format:"SELF MATCHES [c]%@",emailRegex)
   return (emailText.evaluate(with: strEmail))
} 

Благодаря :)

person Ilesh P    schedule 04.03.2015
comment
Добро решение Илеш - person Krutarth Patel; 17.08.2016

NSRegularExpression е най-добрият начин за потвърждаване на имейл адреси с iOS 4.x и По-късно.

-(BOOL) validateEmail:(NSString*) emailString 
{
     NSString *regExPattern = @"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$";
     NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern options:NSRegularExpressionCaseInsensitive error:nil];
     NSUInteger regExMatches = [regEx numberOfMatchesInString:emailString options:0 range:NSMakeRange(0, [emailString length])];
     NSLog(@"%i", regExMatches);
     if (regExMatches == 0) {
         return NO;
     } 
     else
         return YES;
}

Употреба:

if([self validateEmail:@"[email protected]"]) {
  //Email Address is valid.
} 
else {
  //Email Address is invalid.
}
person Bhavin    schedule 17.04.2013
comment
Умен и полезен отговор +1 - person Gajendra K Chauhan; 09.04.2014

-лесно е да потвърдите вашия имейл идентификатор, като извикате validateEmail метод:

-(BOOL)validateEmail:(NSString *)email      
{
    NSString *emailRegex = @"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";  

    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];

    return [emailTest evaluateWithObject:email];
}

Потвърдете своя имейл адрес тук....

BOOL eb=[self validateEmail:**youremailtextfield**];

if(!eb)
{
    UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"Sorry" message:@"Please enter correct email id"
                                                          delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

    [alertsuccess show];
    [alertsuccess release]; 
}
person shankar    schedule 21.12.2012

Ето лесния начин за валидиране на имейл в obj c

if(![self validEmail:self.emailTxtFld.text]) {
    // here show alert not a valid email id
}

тук е валиден метод за идентификатор на имейл

- (BOOL) validEmail:(NSString*) emailString {
if([emailString length]==0){
    return NO;
}
NSString *regExPattern = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:regExPattern options:NSRegularExpressionCaseInsensitive error:nil];
NSUInteger regExMatches = [regEx numberOfMatchesInString:emailString options:0 range:NSMakeRange(0, [emailString length])];
     if (regExMatches == 0) {
         return NO;
     } else {
             return YES;
       }
}

Във версия Swift 3.0

if !validEmailId(inputText: userNameTxtFld.text!)  {
        print("Not Valid Emaild")
    }
else {
    print("valid email id")
}    

func validEmailId(inputText: String)-> Bool {
    print("validate emilId: \(inputText)")
    let emailRegEx = "^(?:(?:(?:(?: )*(?:(?:(?:\\t| )*\\r\\n)?(?:\\t| )+))+(?: )*)|(?: )+)?(?:(?:(?:[-A-Za-z0-9!#$%&’*+/=?^_'{|}~]+(?:\\.[-A-Za-z0-9!#$%&’*+/=?^_'{|}~]+)*)|(?:\"(?:(?:(?:(?: )*(?:(?:[!#-Z^-~]|\\[|\\])|(?:\\\\(?:\\t|[ -~]))))+(?: )*)|(?: )+)\"))(?:@)(?:(?:(?:[A-Za-z0-9](?:[-A-Za-z0-9]{0,61}[A-Za-z0-9])?)(?:\\.[A-Za-z0-9](?:[-A-Za-z0-9]{0,61}[A-Za-z0-9])?)*)|(?:\\[(?:(?:(?:(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5]))\\.){3}(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5]))))|(?:(?:(?: )*[!-Z^-~])*(?: )*)|(?:[Vv][0-9A-Fa-f]+\\.[-A-Za-z0-9._~!$&'()*+,;=:]+))\\])))(?:(?:(?:(?: )*(?:(?:(?:\\t| )*\\r\\n)?(?:\\t| )+))+(?: )*)|(?: )+)?$"
    let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
    let result = emailTest.evaluate(with: inputText)
    return result
}
person User558    schedule 01.03.2017

Това работи точно

-(BOOL) emailValidation:(NSString *)emailTxt
{
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 
    return [emailTest evaluateWithObject:emailTxt];

}
person Mahesh Aswathanarayana    schedule 03.09.2013

перфектна проверка за имейл. Опитайте тази.

- (BOOL)validateEmailWithString:(NSString*)checkString
{

    NSString *laxString = @".+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", laxString];
    return [emailTest evaluateWithObject:checkString];
}
person Patel Jigar    schedule 10.06.2015

Аз съм автор на DCKit библиотека, която има DCMandatoryEmailTextField. Този клас извършва автоматично валидиране на имейли и подчертава/демаркира текстовото поле, когато потребителят въвежда стойност:

="DCKit:

Вижте го: https://github.com/andrew8712/DCKit

person Andrey Gordeev    schedule 01.11.2015

Swift

func validateEmail(email:String) -> Bool {

    let stricterFilter = false
    let stricterFilterString = "[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}"
    let laxString = ".+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2}[A-Za-z]*";
    let emailRegex = stricterFilter ? stricterFilterString : laxString
    let emailTest = NSPredicate(format: "SELF MATCHES %@", emailRegex)

    return emailTest.evaluate(with: email);
}
person tier777    schedule 29.11.2016

Функция:

- (BOOL)validateEmail:(NSString *)enteredEmailID
{
    //checking valid email id or not
    NSString *emailReg = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailReg];
    return [emailTest evaluateWithObject:enteredEmailID];
}

Наречете го така:

if ([self validateEmail: textField.text])
        {
            //NSLog(@"Valid Email");
        }
        else
        {
            //NSLog(@"Invalid Email");
        }

РЕДАКТИРАНЕ: Можете да направите това в текстово поле, завърши ли редактирането на делегати или текстово поле, ако делегати за промяна на знаци

person Raj Aryan    schedule 29.12.2017

Версия, използваща NSRegularExpression и regex шаблон, копирана от OWASP_Validation_Regex_Repository

+ (BOOL) isValidEmail:(NSString *)emailString {
        NSError *error = NULL;
        /**
         * @see <a href="https://www.owasp.org/index.php/OWASP_Validation_Regex_Repository">OWASP_Validation_Regex_Repository</a>
         */
        NSString *emailPattern = @"^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:emailPattern
                                                                               options:NSRegularExpressionCaseInsensitive
                                                                                 error:&error];
        NSUInteger matchCount = [regex numberOfMatchesInString:emailString options:0 range:NSMakeRange(0, [emailString length])];
        return matchCount > 0;
    }
person Codingpan    schedule 22.01.2020