কীভাবে কোনও ইমেল ঠিকানাটি দ্রুতগতিতে বৈধ করবেন?


338

কেউ কি সুইফটে একটি ইমেল ঠিকানা যাচাই করতে জানেন? আমি এই কোডটি পেয়েছি:

- (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])];

    NSLog(@"%i", regExMatches);
    if (regExMatches == 0) {
        return NO;
    } else {
        return YES;
    }
}

তবে আমি এটি সুইফটে অনুবাদ করতে পারি না।


8
অনুবাদ সোজা হতে হবে। কোন অংশটি আপনাকে সমস্যা দিচ্ছে?
সুলতান

12
প্রার্থনা করতে ভুলবেন না যে আপনার ব্যবহারকারীর কারওওও নতুন শীর্ষ স্তরের ডোমেন নেই। যেমন.coffee
ম্যাথিয়াস Bauch

1
@ আন্টজি: আমি "কেউ @ জিমেইল" এর সাথে চেক করেছি এবং আপনার রেজেক্স সত্য হয়ে গেছে।
ইং

2
ব্যবহারকারীরা তাদের ই-মেইল ঠিকানা প্রবেশ করিয়েছে তা যাচাই করার জন্য রেজিজেসগুলি কাজ করে না। একমাত্র 100% সঠিক উপায় হল একটি অ্যাক্টিভেশন ইমেল প্রেরণ। দেখুন: আমি কীভাবে ইমেল ঠিকানাটি যাচাই করব জানি না হওয়া পর্যন্ত আমি
আরএফসিটি পড়ব না

2
এটি একটি আকর্ষণীয় QA। এটি প্রায় পুরো সাইটের "সবচেয়ে ভুল" QA অবশ্যই। বর্তমানে 1০০ টি ভোটের সাথে # উত্তর (কী ?!) একেবারে, সম্পূর্ণ, প্রতিটি সম্ভাব্য উপায়ে ভুল (প্রতিটি স্বতন্ত্র লাইন সম্পূর্ণ ভুল, এবং প্রতিটি ধারণা এবং ধারণা ভুল ........ !!!) অন্যান্য অত্যন্ত ভোট দেওয়া উত্তরগুলির মধ্যে অনেকগুলি হয় "সম্পূর্ণ ভুল", "চরম শালীন", বা, সরল ভাঙা এবং সংকলনও করে না। তবুও, এই কিউর প্রকৃতিটি "অভিজাত রেগেক্স ইঞ্জিনিয়ারিং" এর জন্য অনেকগুলি উত্তরের (উচ্চ ভোটাভুটিড!) ফিচারিং রেগেক্স ইঞ্জিনিয়ারিংয়ের বৈশিষ্ট্যযুক্ত। এটি একটি সত্যিই আকর্ষণীয় কিউএ !! কেন ??
ফ্যাটি

উত্তর:


769

আমি ব্যবহার করব NSPredicate:

func isValidEmail(_ email: String) -> Bool {        
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"

    let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
    return emailPred.evaluate(with: email)
}

সুইফটের সংস্করণগুলির জন্য 3.0 এর আগে:

func isValidEmail(email: String) -> Bool {
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"

    let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
    return emailPred.evaluate(with: email)
}

১.২ এর আগে সুইফ্টের সংস্করণগুলির জন্য:

func isValidEmail(email: String) -> Bool {
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"

    if let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx) {
        return emailPred.evaluateWithObject(email)
    }
    return false
}

6
return emailTest.evaluateWithObject(testStr)আরও অনেক সহজ এবং পাঠযোগ্য হবে না ? তুলনা করা == trueকিছুটা জাভাস্ক্রিপ্টের মতো।
সুলতান

15
এটি কোনও এক্সটেনশন উপলব্ধ কিনা তা পরীক্ষা করে না, একটি @ ইতিমধ্যে ঠিক আছে :(
কুলারবাইটস

6
এই পরীক্ষাটি @ পরীক্ষার জন্য যাচাইকরণ করে না ... কম
অ্যালান

3
এটি ইমেল সনাক্ত করে না @ @Alexcristea থেকে নীচের উত্তরটি দেয়
বেন সুলিভান

3
এটি বেশ মজার যে ............ পাশাপাশি (1) রেজেক্স পুরোপুরি, সম্পূর্ণ ভুল (2) রেজেক্স (এমনকি এটি করার চেষ্টা করার প্রসঙ্গেও) বড় ত্রুটি রয়েছে ( 3) সুইফটটি ভুল (4) এমনকি এটিকে নির্ধারণ করেও শৈলী সম্পূর্ণ ভুল (5) এমন নয় যে এটি সমস্ত কিছু দেওয়া হয়েছে তবে এটি আপনাকে উল্লেখও করে না যে আপনাকে ভবিষ্যদ্বাণীটিকে ... হাস্যকরভাবে ক্যাশে করতে হবে, ( 6) এখনও কোথাও কোড ("ক্যালেন্ডার" - কী?) এখান থেকে অনুলিপি করা হয়েছিল from
ফ্যাটি

115

সম্পাদনা, সুইফট 3-র জন্য আপডেট করা হয়েছে:

func validateEmail(enteredEmail:String) -> Bool {

    let emailFormat = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
    let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailFormat)
    return emailPredicate.evaluate(with: enteredEmail)

}

সুইফট 2 এর মূল উত্তর:

func validateEmail(enteredEmail:String) -> Bool {

    let emailFormat = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
    let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailFormat)
    return emailPredicate.evaluateWithObject(enteredEmail)

}

এটা ঠিক কাজ করছে।


2
একটি বৈধ regex সঙ্গে প্রথম। অন্যান্যরা @ @ আচকে সত্যে যাচাই করে
netshark1000

1
@ netshark1000, কেবলমাত্র আপভোট সহ, যে কোনও উত্তর শীর্ষে থাকবে। :)
আজিক আব্দুল্লাহ

এনএসরেগুলারএক্সপ্রেসন এনএসপ্রেডিকেটের চেয়ে ব্যবহার করা সহজ
গিলিয়াম লরেন্ট

1
এটি ডোমেন নামের পরে দুটি বিন্দুর শর্তটি পরিচালনা করে না। এই উত্তরটি stackoverflow.com/a/53441176/5032981
প্রশান্ত গায়কওয়াদ

@ আজিক আবদুল্লাহ যদি আপনি 'abc @ gmail..com' লিখেন তবে তাও বৈধ হবে
নিজ

110

Stringক্লাস এক্সটেনশন হিসাবে

সুইফট 4

extension String {
    func isValidEmail() -> Bool {
        // here, `try!` will always succeed because the pattern is valid
        let regex = try! NSRegularExpression(pattern: "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[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])?)*$", options: .caseInsensitive)
        return regex.firstMatch(in: self, options: [], range: NSRange(location: 0, length: count)) != nil
    }
}

ব্যবহার

if "rdfsdsfsdfsd".isValidEmail() {

}

4
countElementsএখনcount
জ্যাক শাপিরো

25
এক্সএক্সএক্স @ ইয়ে ফিরুন সত্য?
কুলেন সান

1
কুলেন সান হিসাবে একই, foo @ বার সত্য ফিরে আসে।
রমি ভেরিন

3
.tld ব্যতীত ব্যবহারকারী @ হোস্ট হ'ল একটি বৈধ ইমেল ঠিকানা, যেমন রুট @ লোকালহোস্ট
বুধ

1
নোট করুন যে এনএসরেঞ্জ দৈর্ঘ্যের সম্পত্তিটিতে অক্ষরগুলির পরিবর্তে স্ট্রিং utf16.count ব্যবহার করা উচিত
গণনা

64

আপনি যদি এটির জন্য একটি পরিষ্কার এবং সরল সমাধানের সন্ধান করছেন তবে আপনার https://github.com/nsagora/uthorization-compompants এ একবার দেখা উচিত ।

এটিতে একটি ইমেল যাচাইকরণের প্রস্তাব রয়েছে যা আপনার কোডে সহজেই সংহত হয়:

let email = "test@example.com"
let rule = EmailValidationPredicate()
let isValidEmail = rule.evaluate(with: email)

হুডের পিছনে এটি আরএফসি 5322 রেজি ব্যবহার করে ( http://emailregex.com ):

let regex = "(?:[\\p{L}0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[\\p{L}0-9!#$%\\&'*+/=?\\^_`{|}" +
    "~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\" +
    "x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[\\p{L}0-9](?:[a-" +
    "z0-9-]*[\\p{L}0-9])?\\.)+[\\p{L}0-9](?:[\\p{L}0-9-]*[\\p{L}0-9])?|\\[(?:(?:25[0-5" +
    "]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-" +
    "9][0-9]?|[\\p{L}0-9-]*[\\p{L}0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21" +
    "-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"

3
বাহ, ইমেলরেজেক্স ডটকম সম্পর্কে জানতেন না। এটা খুবই সুন্দর!
স্যামুয়েল ইভ

2
অবশেষে, এক যে ফিল্টার ইমেল @
বেন সুলিভান

এটি সঠিক - abcd@abcd.com নিয়ে কাজ করছে। এটি abc @ abc বৈধ নয়
অনিল গুপ্ত

আহ, অবশেষে ..: ডি
Üমাগ ইমরান

39

এখানে যুক্তিসঙ্গত সমাধান:

"যুক্তিসঙ্গত সমাধান"

বহু বিশাল ভলিউম অ্যাপ্লিকেশনগুলিতে বছরের পর বছর ধরে ব্যবহৃত এবং পরীক্ষিত।

1 - এটি আপনি এই পরামর্শগুলিতে প্রায়শই দেখতে পান এমন অনেক ভয়াবহ রেজেক্স ভুল এড়িয়ে চলে

2 - এটি "x @ x" এর মতো বোকা ইমেলগুলিকে অনুমতি দেয় না যা নির্দিষ্ট কিছু আরএফসি-র অধীনে বৈধ বলে মনে করা হয়, তবে সম্পূর্ণ নির্বোধ, ইমেল হিসাবে ব্যবহার করা যায় না এবং যা আপনার সমর্থন কর্মীরা তাত্ক্ষণিকভাবে প্রত্যাখ্যান করবে এবং কোনটি মেলার পরিষেবাদি (মেলচিম্প, গুগল, আওস ইত্যাদি) কেবল প্রত্যাখ্যান করে। যদি (কোনও কারণে) আপনার এমন কোনও সমাধানের প্রয়োজন হয় যা 'x @ x' এর মতো স্ট্রিংগুলিকে মঞ্জুরি দেয় তবে অন্য সমাধান ব্যবহার করুন।

3 - কোডটি খুব, খুব, খুব বোধগম্য

4 - এটি কিআইএসএস, নির্ভরযোগ্য এবং বিপুল সংখ্যক ব্যবহারকারী সহ বাণিজ্যিক অ্যাপ্লিকেশনগুলিতে ধ্বংসের পরীক্ষা করা tested

5 - প্রযুক্তিগত পয়েন্ট, প্রিডিকেট একটি বিশ্বব্যাপী, যেমন অ্যাপল বলেছে এটি হওয়া উচিত (কোডের পরামর্শগুলির সাথে নজর রাখুন যার মধ্যে এটি নেই)

let __firstpart = "[A-Z0-9a-z]([A-Z0-9a-z._%+-]{0,30}[A-Z0-9a-z])?"
let __serverpart = "([A-Z0-9a-z]([A-Z0-9a-z-]{0,30}[A-Z0-9a-z])?\\.){1,5}"
let __emailRegex = __firstpart + "@" + __serverpart + "[A-Za-z]{2,8}"
let __emailPredicate = NSPredicate(format: "SELF MATCHES %@", __emailRegex)

extension String {
    func isEmail() -> Bool {
        return __emailPredicate.evaluate(with: self)
    }
}

extension UITextField {
    func isEmail() -> Bool {
        return self.text!.isEmail()
    }
}

এটা এত সহজ।

ব্যাখ্যা:

নিম্নলিখিত বর্ণনায়, "ওসি" এর অর্থ সাধারণ অক্ষর - একটি চিঠি বা একটি অঙ্ক।

__ প্রথম পার্ট ... একটি ওসি দিয়ে শুরু এবং শেষ করতে হবে। মাঝের অক্ষরের জন্য আপনার নির্দিষ্ট অক্ষর থাকতে পারে যেমন আন্ডারস্কোর, তবে শুরু এবং শেষটি একটি ওসি হতে হবে। (তবে, কেবল একটি ওসি থাকা ঠিক আছে এবং এটিই উদাহরণস্বরূপ: j@blah.com)

__serverpart ... আপনার কাছে " বেলা " এর মতো বিভাগ রয়েছে । যা পুনরাবৃত্তি । (সুতরাং mail.city.fcu.edu ধরণের জিনিস।) বিভাগগুলি একটি ওসি দিয়ে শুরু করতে হবে এবং শেষ করতে হবে, তবে মাঝখানে আপনি একটি ড্যাশও পেতে পারেন "-"। (আপনি যদি সেখানে অন্যান্য অস্বাভাবিক চরিত্রগুলিকে অনুমতি দিতে চান , সম্ভবত আন্ডারস্কোরটি, ড্যাশের আগে কেবল যোগ করুন)) এটি কেবল একটি ওসি হিসাবে এমন একটি বিভাগ থাকা ঠিক আছে । (Joe@w.campus.edu হিসাবে) আপনার পাঁচটি পর্যন্ত বিভাগ থাকতে পারে আপনার একটি বিভাগ থাকতে হবে। অবশেষে টিএলডি (যেমন। কম) আকারে কঠোরভাবে 2 থেকে 8 হয়। স্পষ্টতই, আপনার সমর্থন বিভাগ দ্বারা পছন্দ হিসাবে কেবল "8" পরিবর্তন করুন।


গুরুত্বপূর্ণ!

আপনাকে অবশ্যই গ্লোবাল হিসাবে শিকারী রাখতে হবে, প্রতিবার এটি তৈরি করবেন না।

নোট করুন যে অ্যাপল ডক্সে পুরো বিষয়টি সম্পর্কে উল্লেখ করে এটিই প্রথম

আপনি যখন এমন প্রস্তাবনাগুলি দেখে থাকেন যেগুলি প্রাকটিকেটিকে ক্যাশে করে না তখন এটি খুব অবাক হয়।


1
এটি। TEINDER এর মতো নতুন টিএলডি সমর্থন করে?
রোমান

হাই @ রোমান - লক্ষ্য করুন যেখানে এটি পরিষ্কারভাবে বলেছে "অবশেষে টিএলডি (.কম বা এর মতো) কঠোরভাবে 2 থেকে 8 টি বর্ণ রয়েছে।" এটি এটি যত্ন নেয়। আপনি নিজের পছন্দ অনুযায়ী মান "8" পরিবর্তন করতে পারেন। (আপাতত, অনেক বড় সংস্থায় গ্রাহক পরিষেবা কোনও দীর্ঘ টিএলডি কেবল একটি কেলেঙ্কারী হিসাবে প্রত্যাখ্যান করবে - তবে যাইহোক, এটি আপনার সিদ্ধান্ত, "8" বা আপনার পছন্দ মতো কোনও মান ব্যবহার করুন))
ফ্যাটি

2
বিন্দু (4) এর সাথে: আপনি কীভাবে প্রচুর ব্যবহারকারীর সাথে পরীক্ষা করেছেন? আপনি কি ব্যবহারকারীদের ট্র্যাক করেছিলেন, যা বাণিজ্যিক অ্যাপ্লিকেশনগুলিতে সাইন আপ করতে পারে নি, কারণ রেইজেক্স তাদের ইমেল ঠিকানা ব্যবহার থেকে বাধা দিয়েছে? কেবলমাত্র "যুক্তিসঙ্গত" হওয়া উচিত, যা অনুমান (আরএফসি) সুনির্দিষ্ট করে বা এটি অর্জন করা যায় না, তবে এমন কিছু যা আরও স্বাচ্ছন্দ্যযুক্ত তবে স্পেক থেকে সমস্ত কিছু coversেকে রাখে। যদি ব্যবহারকারীদের x @ x প্রবেশ করতে না দেওয়া হয় তবে তারা কিছু कचरा@example.com প্রবেশ করবেন যা আপনার / যে কোনও রেজিটকে পাস করবে।
থ্রুটজ

হাই @thetrutz, "कचির@example.com" একেবারে সাধারণ ইমেল ঠিকানা। আরএফসিতে "x @ x" এর মতো তাত্ত্বিক প্রতিমা অন্তর্ভুক্ত রয়েছে। আপনি বা আমি যে কোনও সত্যিকারের বাণিজ্যিক ক্লায়েন্টের পক্ষে কাজ করব তা বলবে "তাদের অস্বীকার করুন"। (মনে রাখবেন যে কোনও বাস্তব-বিশ্বের বৃহত ব্যবসায়ের ক্ষেত্রে আমার রুক্ষ রূপরেখার চেয়ে এখানে অনেক বেশি বিধিনিষেধ রয়েছে, যেমন আমি রোমানের উপরের মন্তব্যে উল্লেখ করেছি।) আপনার চূড়ান্ত বাক্যটি বিভ্রান্তিকর - অবশ্যই একটি "অ-কার্যক্ষম ইমেল" কোনও পাস করবে স্থানীয় পরীক্ষা? আপনি কি বোঝাতে চেয়েছেন? স্পষ্টতই ইমেলগুলি কেবলমাত্র "আপনার ইমেল নিশ্চিত করুন" সিস্টেমের মাধ্যমে চূড়ান্তভাবে যাচাই করা হয়।
ফ্যাটি

সুইফটে প্রতিটি প্রক্রিয়াটি অপ্টিমাইজ করা দরকার কারণ আমরা সাধারণত সার্ভারের দিক থেকে এই ভাষাটি ব্যবহার করি।
নিকোলাস

25

এখানে সঠিক রেজেক্স সহ দুটি সর্বাধিক ভোট দেওয়া উত্তরের একটি ফিউজ দেওয়া হয়েছে: প্রিডিকেট ব্যবহার করে একটি স্ট্রিং এক্সটেনশান যাতে আপনি স্ট্রিং.আইএসইমেলকে কল করতে পারেন

    extension String {
        var isEmail: Bool {
           let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}"            
           let emailTest  = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
           return emailTest.evaluateWithObject(self)
        }
    }

19

সুইফট 5-এ সহজতম উপায়

extension String {
    var isValidEmail: Bool {
        NSPredicate(format: "SELF MATCHES %@", "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}").evaluate(with: self)
    }
}

উদাহরণ

"kenmueller0@gmail.com".isValidEmail

আয় ...

true

2
পুনরাবৃত্তি উত্তর পুনরাবৃত্তি কি লাভ? যা কোনও সুইফট 5 বৈশিষ্ট্যের উপর নির্ভর করে না
রোমেক্স

17

আমি স্ট্রিংয়ের এক্সটেনশন হিসাবে এটি ব্যবহার করার পরামর্শ দেব:

extension String {    
    public var isEmail: Bool {
        let dataDetector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)

        let firstMatch = dataDetector?.firstMatch(in: self, options: NSRegularExpression.MatchingOptions.reportCompletion, range: NSRange(location: 0, length: length))

        return (firstMatch?.range.location != NSNotFound && firstMatch?.url?.scheme == "mailto")
    }

    public var length: Int {
        return self.characters.count
    }
}

এবং এটি ব্যবহার করতে:

if "hodor@gameofthrones.com".isEmail { // true
    print("Hold the Door")
}

1
নোট করুন যে এনএসরেঞ্জ দৈর্ঘ্যের সম্পত্তিটিতে অক্ষরগুলির পরিবর্তে স্ট্রিং utf16.count ব্যবহার করা উচিত
গণনা

সুইফট 4 আপডেট করুন: এক্সটেনশান স্ট্রিং {সার্বজনীন বর্ণ ইমেল: বুল data ডেটা ডিটেক্টরকে = চেষ্টা করুন? এনএসডাটাডেক্টর (প্রকারগুলি: এনএসটিেক্সটচেকারিংসাল্ট। চেকিংটাইপ.লিংক.রাউভ্যালু) প্রথমে ম্যাচ = ডেটা ডিটেক্টর? !? range.location = NSNotFound && firstMatch .url .scheme ==, "mailto")}
Duan গুয়েন

15

এটি সুইফট ২.০ - ২.২ এর আপডেট হওয়া সংস্করণ

 var isEmail: Bool {
    do {
        let regex = try NSRegularExpression(pattern: "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[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])?)*$", options: .CaseInsensitive)
        return regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count)) != nil
    } catch {
        return false
    }
}

8
foo @ বার কি সত্য?
রমি ভেরিন

2
আ @ আচকে সত্যে যাচাই করে
netshark1000

4
এর কারণ আরএফসি এই ইমেল
ঠিকানাগুলিকে

নোট করুন যে এনএসরেঞ্জ দৈর্ঘ্যের সম্পত্তিটিতে অক্ষরগুলির পরিবর্তে স্ট্রিং utf16.count ব্যবহার করা উচিত
গণনা

প্রাকটিকে ক্যাশে না করা সত্যিই ভুল / দরিদ্র। ডকোতে সমস্যাটি সম্পর্কে অ্যাপল প্রথম কথা বলেছে। পৃষ্ঠার উত্তরগুলির বেশিরভাগ দ্বারা করা একটি সুস্পষ্ট ভুল।
ফ্যাটি

9

এখানে অনেকগুলি সঠিক উত্তর রয়েছে, তবে অনেকগুলি "রেজেক্স" অসম্পূর্ণ এবং এটি ঘটতে পারে যে: "নাম @ ডোমেন" এর মতো একটি ইমেল একটি বৈধ ইমেলের ফলাফল দেয়, তবে তা হয় না। এখানে সম্পূর্ণ সমাধান:

extension String {

    var isEmailValid: Bool {
        do {
            let regex = try NSRegularExpression(pattern: "(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])", options: .CaseInsensitive)
            return regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count)) != nil
        } catch {
            return false
        }
    }
}

সঠিকভাবে কাজ করে না, এটি আপনাকে ডোমেনের পরে স্পেস যুক্ত করতে দেয়।
জুয়ান বোয়েরো

লক্ষ্য করুন NSRange দৈর্ঘ্য সম্পত্তি characters.count পরিবর্তে স্ট্রিং utf16.count ব্যবহার করা উচিত
লিও Dabus

@ ফ্যাটি আপনার বক্তব্যটি তর্ক করে। আপনার মন্তব্যটি খুব অকেজো, একটি উন্নতির পরামর্শ দিন, একটি সমাধান প্রস্তাব করুন। সম্পূর্ণরূপে ভুল বলা খুব বোকামি এবং একটি ঘনিষ্ঠ মানসিকতার
অন্তর্নিহিত

"এখানে অনেকগুলি সঠিক উত্তর রয়েছে" যে বাক্যটি দর্শনীয়ভাবে ভুল :) :) :)
ফ্যাটি

8

এখানে ভিত্তি করে একটি পদ্ধতি rangeOfString:

class func isValidEmail(testStr:String) -> Bool {
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
    let range = testStr.rangeOfString(emailRegEx, options:.RegularExpressionSearch)
    let result = range != nil ? true : false
    return result
}

দ্রষ্টব্য: আপডেট হওয়া টিএলডি দৈর্ঘ্য।

আরএফসি 5322 অনুসারে ইমেলের জন্য এখানে স্থির রেগেক্স রয়েছে, নোট করুন যে এটি সবচেয়ে ভাল ব্যবহার করা হয়নি কারণ এটি কেবলমাত্র ইমেল ঠিকানাগুলির মূল বাক্য গঠন পরীক্ষা করে এবং এটি পরীক্ষা করে না যে শীর্ষ স্তরের ডোমেন বিদ্যমান exists

(: [একটি z0-9 # $% & '* + + / = ^: _' {|} ~ - + + (?।: \ [একটি-z0-9 # $% &!] '? * + + / ? = ^: _ '{|} ~ -]) *
  | "(: [\ X01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x21 \ x23- \ x5b \ x5d- \ x7f]
      | \\ [\ x01- \ x09 \ x0b \ x0c \ x0e- \ x7f]) * ")
@ (?: (?: [a-z0-9] (?: [a-z0-9 -] * [a-z0-9])? \।) + [a-z0-9] (?: [ একটি z0-9 -] * [একটি z0-9])?
  | \ [(:( ?: 25 [0-5] |? 2 [0-4] [0-9] | [01] [0-9] [0-9]?) \) {3}।
       (: 25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9] | [একটি-z0-9 -] * [A- z0-9]:
          (: [\ X01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x21- \ x5a \ x53- \ x7f]
          | \\ [\ x01- \ x09 \ x0b \ x0c \ x0e- \ x7f]) + +)
     \])

ইমেল RegExs এ আরও সম্পূর্ণ তথ্যের জন্য নিয়মিত- এক্সপ্রেসন.ইন.ফো দেখুন ।

লক্ষ্য করুন যে কোনও ভাষার প্রয়োজন যেমন অবজেক্টিভ-সি বা সুইফ্টের দ্বারা প্রয়োজনীয় হিসাবে পালানো নেই।


1
আপনি যে ইমেল রেজিএক্স ব্যবহার করেন তা কেবল সাধারণ ভুল। এটি কেবলমাত্র 2 থেকে 4 টি অক্ষরের জন্য টিএলডি অনুমতি দেয়, যখন ডোমেনগুলির মতো .engineerউপস্থিত রয়েছে exists
আন্তজি

বোঝা গেছে, আমি আমার উত্তরটি রক্ষা করছি না তবে সম্পাদনার স্তর। উপরের মত একটি মন্তব্য যুক্ত করুন, ডাউন-ভোট, আরও ভাল উত্তরের দিকে নির্দেশ করুন, আপনার নিজের উত্তর যুক্ত করুন। কোনও উত্তর যথেষ্ট পরিমাণে পরিবর্তন করা উপযুক্ত নয় appropriate সম্পূর্ণতার জন্য আমি বিচ্ছিন্ন RegEx যুক্ত করেছি।
জাফ

ওহ কেন শুধু উত্তর মুছে ফেলবে না কেন? এটি এখানে রাখার কী কারণ হতে পারে?
ফ্যাটি

7

আমি তার জন্য একটি এক্সটেনশন ব্যবহার পছন্দ করি। এছাড়াও, এই ইউআরএল http://emailregex.com আপনাকে রেজেক্স সঠিক কিনা তা পরীক্ষা করতে সহায়তা করতে পারে। প্রকৃতপক্ষে, সাইটটি কয়েকটি প্রোগ্রামিং ভাষার জন্য পৃথক পৃথক প্রয়োগ প্রস্তাব করে। আমি সুইফট 3 এর জন্য আমার বাস্তবায়নটি ভাগ করি ।

extension String {
    func validateEmail() -> Bool {
        let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
        return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: self)
    }
}

সেখানে উদাহরণস্বরূপ .. বাজে @ একটা অদ্ভুত ডট দিয়ে .abc জন্য, .. এর কিছু সমস্যা আছে আপনি থাকতে পারে
Fattie

5

দ্রুত 2.1 এর জন্য: এটি ইমেল ফু @ বারের সাথে সঠিকভাবে কাজ করে

extension String {
    func isValidEmail() -> Bool {
        do {
            let regex = try NSRegularExpression(pattern: "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}", options: .CaseInsensitive)
            return regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count)) != nil
        } catch {
                return false
        }
    }
}

1
এটি আমার পক্ষে ভাল কাজ করে বলে মনে হচ্ছে। যতদুর আমি এটা বুঝতে হিসাবে আপনি এমনকি 'জেড' (বড় হাতের অক্ষরে) বর্জন করতে পারে যেহেতু আপনি বিকল্প আছে .CaseInsensitive যাহাই হউক না কেন সেট করুন ...
আজম

লক্ষ্য করুন NSRange দৈর্ঘ্য সম্পত্তি characters.count পরিবর্তে স্ট্রিং utf16.count ব্যবহার করা উচিত
লিও Dabus

5

সুইফট ব্যবহার 4.2

extension String {
    func isValidEmail() -> Bool {
        let regex = try? NSRegularExpression(pattern: "^(((([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])+(\\.([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])|(\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-zA-Z]|\\d|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])|(([a-zA-Z]|\\d|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])([a-zA-Z]|\\d|-|\\.|_|~|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])*([a-zA-Z]|\\d|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])))\\.)+(([a-zA-Z]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])|(([a-zA-Z]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])([a-zA-Z]|\\d|-|_|~|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])*([a-zA-Z]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])))\\.?$", options: .caseInsensitive)
        return regex?.firstMatch(in: self, options: [], range: NSMakeRange(0, self.count)) != nil
    }
    func isValidName() -> Bool{
        let regex = try? NSRegularExpression(pattern: "^[\\p{L}\\.]{2,30}(?: [\\p{L}\\.]{2,30}){0,2}$", options: .caseInsensitive)

        return regex?.firstMatch(in: self, options: [], range: NSMakeRange(0, self.count)) != nil
    } }

এবং ব্যবহার

if (textField.text?.isValidEmail())! 
    {
      // bla bla
    }
else 
    {

    }

4

@ ফ্যাটি দ্বারা " পুনরাবৃত্তিমূলক সমাধান" এর এটি একটি নতুন সংস্করণ , একটি নতুন ফাইল যা সুইফট ৪.১ এ পরীক্ষা করা হয়েছে String+Email.swift:

import Foundation

extension String {
    private static let __firstpart = "[A-Z0-9a-z]([A-Z0-9a-z._%+-]{0,30}[A-Z0-9a-z])?"
    private static let __serverpart = "([A-Z0-9a-z]([A-Z0-9a-z-]{0,30}[A-Z0-9a-z])?\\.){1,5}"
    private static let __emailRegex = __firstpart + "@" + __serverpart + "[A-Za-z]{2,6}"

    public var isEmail: Bool {
        let predicate = NSPredicate(format: "SELF MATCHES %@", type(of:self).__emailRegex)
        return predicate.evaluate(with: self)
    }
}

সুতরাং এর ব্যবহার সহজ:

let str = "mail@domain.com"
if str.isEmail {
    print("\(str) is a valid e-mail address")
} else {
    print("\(str) is not a valid e-mail address")
}

আমি কেবল একটি যোগ করার জন্য পছন্দ করি না funcকরতে String, বস্তু হচ্ছে একটি ই-মেইল ঠিকানা তাদের (অথবা না) সহজাত হিসাবে। সুতরাং আমার Boolসম্পত্তি থেকে কোনও সম্পত্তি একটির চেয়ে বেশি ফিট funcকরতে পারে।


2

সাধারণ এক্সটেনশন তৈরি করুন:

extension NSRegularExpression {

    convenience init(pattern: String) {
        try! self.init(pattern: pattern, options: [])
    }
}

extension String {

    var isValidEmail: Bool {
        return isMatching(expression: NSRegularExpression(pattern: "^[A-Z0-9a-z\\._%+-]+@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$"))
    }

    //MARK: - Private

    private func isMatching(expression: NSRegularExpression) -> Bool {
        return expression.numberOfMatches(in: self, range: NSRange(location: 0, length: characters.count)) > 0
    }
}

উদাহরণ:

"b@bb.pl".isValidEmail //true
"b@bb".isValidEmail //false

তোমরা যে কোন কিছু করার জন্য এক্সটেনশন নিম্নলিখিত প্রসারিত করতে পারেন আপনি প্রয়োজন: isValidPhoneNumber, isValidPasswordইত্যাদি ...


নোট করুন যে NSRangeদৈর্ঘ্যের সম্পত্তিটির String utf16.countপরিবর্তে ব্যবহার করা উচিতcharacters.count
লিও ডাবাস

প্যাটার্নটি সম্পূর্ণ ভুল
ফ্যাটি

2

ইন সুইফট 4.2 এবং Xcode 10.1

//Email validation
func isValidEmail(email: String) -> Bool {
    let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
    var valid = NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: email)
    if valid {
        valid = !email.contains("Invalid email id")
    }
    return valid
}

//Use like this....
let emailTrimmedString = emailTF.text?.trimmingCharacters(in: .whitespaces)
if isValidEmail(email: emailTrimmedString!) == false {
   SharedClass.sharedInstance.alert(view: self, title: "", message: "Please enter valid email")
}

আপনি যদি SharedClass ব্যবহার করতে চান।

//This is SharedClass
import UIKit
class SharedClass: NSObject {

static let sharedInstance = SharedClass()

//Email validation
func isValidEmail(email: String) -> Bool {
    let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
    var valid = NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: email)
    if valid {
        valid = !email.contains("Invalid email id")
    }
    return valid
}

private override init() {

}
}

এবং কল ফাংশন এইভাবে ....

if SharedClass.sharedInstance. isValidEmail(email: emailTrimmedString!) == false {
   SharedClass.sharedInstance.alert(view: self, title: "", message: "Please enter correct email")
   //Your code here
} else {
   //Code here
}

1

আমি ইনপুট বৈধতার জন্য ডিজাইন করা একটি লাইব্রেরি তৈরি করেছি এবং "মডিউলগুলি" এর মধ্যে একটি আপনাকে সহজেই একগুচ্ছ জিনিসগুলি বৈধ করতে দেয় ...

উদাহরণস্বরূপ কোনও ইমেল যাচাই করার জন্য:

let emailTrial = Trial.Email
let trial = emailTrial.trial()

if(trial(evidence: "test@test.com")) {
   //email is valid
}

সুইফটপ লাইব্রেরি ... আশা করি এটি সাহায্য করবে!


1

এখানে সুইফট 3-এ একটি এক্সটেনশন দেওয়া আছে

extension String {
    func isValidEmail() -> Bool {
        let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
        return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: self)
    }
}

কেবল এটির মতো ব্যবহার করুন:

if yourEmailString.isValidEmail() {
    //code for valid email address
} else {
    //code for not valid email address
}

অ্যালেক্স্রিস্টিয়া উত্তর থেকে রেজেক্স ব্যবহার করতে পরিবর্তন করা, এটির সঠিক সমাধান।
এটিগং

0

যেহেতু এখন অনেকগুলি অদ্ভুত শীর্ষ স্তরের ডোমেন নাম রয়েছে তাই আমি শীর্ষ ডোমেনটির দৈর্ঘ্য পরীক্ষা করা বন্ধ করি ...

আমি যা ব্যবহার করি তা এখানে:

extension String {

    func isEmail() -> Bool {
        let emailRegEx = "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$"
        return NSPredicate(format:"SELF MATCHES %@", emailRegEx).evaluateWithObject(self)
    } 
}

0

মনে হচ্ছে কাজ করাও ...

let regex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"

func validate(email: String) -> Bool {
    let matches = email.rangeOfString(regex, options: .RegularExpressionSearch)
    if let _ = matches {
        return true
    }
    return false
}

0

অন্যান্য প্রস্তাবিত সমাধানের তুলনায় কম ভার্বোজ কোড ব্যবহার করে, সুইট ২.২-এর উত্তর অ্যারসোনিক উত্তর আপডেট করেছেন:

extension String {
    func isValidEmail() -> Bool {
        let regex = try? NSRegularExpression(pattern: "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[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])?)*$", options: .CaseInsensitive)
        return regex?.firstMatchInString(self, options: [], range: NSMakeRange(0, self.characters.count)) != nil
    }
}

abcd @ a এই রেজেক্সের সাথে পাস করছে। আপনার এটি ঠিক করা উচিত।
গুণহান

নোট করুন যে এনএসরেঞ্জ দৈর্ঘ্যের সম্পত্তিটিতে অক্ষরগুলির পরিবর্তে স্ট্রিং utf16.count ব্যবহার করা উচিত
গণনা

0

@ জেফারসনব্বির উত্তরটি নিকটে, তবে trueযদি স্ট্রিংটি "body@something.com সহ কিছু এমন একটি বৈধ ইমেল "থাকে তবে তা ফিরে আসে যা আমরা চাই না। নীচে স্ট্রিংয়ের একটি এক্সটেনশান যা ভালভাবে কাজ করে (এবং বৈধ ফোন নম্বর এবং অন্যান্য ডেটা ডিটেক্টরকে বুট করার জন্য পরীক্ষার অনুমতি দেয়।

/// Helper for various data detector matches.
/// Returns `true` iff the `String` matches the data detector type for the complete string.
func matchesDataDetector(type: NSTextCheckingResult.CheckingType, scheme: String? = nil) -> Bool {
    let dataDetector = try? NSDataDetector(types: type.rawValue)
    guard let firstMatch = dataDetector?.firstMatch(in: self, options: NSRegularExpression.MatchingOptions.reportCompletion, range: NSRange(location: 0, length: length)) else {
        return false
    }
    return firstMatch.range.location != NSNotFound
        // make sure the entire string is an email, not just contains an email
        && firstMatch.range.location == 0
        && firstMatch.range.length == length
        // make sure the link type matches if link scheme
        && (type != .link || scheme == nil || firstMatch.url?.scheme == scheme)
}
/// `true` iff the `String` is an email address in the proper form.
var isEmail: Bool {
    return matchesDataDetector(type: .link, scheme: "mailto")
}
/// `true` iff the `String` is a phone number in the proper form.
var isPhoneNumber: Bool {
    return matchesDataDetector(type: .phoneNumber)
}
/// number of characters in the `String` (required for above).
var length: Int {
    return self.characters.count
}

লক্ষ্য করুন NSRange দৈর্ঘ্য সম্পত্তি characters.count পরিবর্তে স্ট্রিং utf16.count ব্যবহার করা উচিত
লিও Dabus

0

এবং সুইফ্ট 3 এর জন্য :

extension String {
    func isValidEmail() -> Bool {
        let regex = try? NSRegularExpression(pattern: "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[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])?)*$", options: .caseInsensitive)
        return regex?.firstMatch(in: self, options: [], range: NSMakeRange(0, self.characters.count)) != nil
    }
}

লক্ষ্য করুন NSRange দৈর্ঘ্য সম্পত্তি characters.count পরিবর্তে স্ট্রিং utf16.count ব্যবহার করা উচিত
লিও Dabus

0

প্রতিক্রিয়াগুলির তালিকায় আমার একমাত্র সংযোজনটি হ'ল লিনাক্সের জন্য NSRegularExpressionএটি বিদ্যমান নেই, এটি আসলেRegularExpression

    func isEmail() -> Bool {

    let patternNormal = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"

    #if os(Linux)
        let regex = try? RegularExpression(pattern: patternNormal, options: .caseInsensitive)
    #else
        let regex = try? NSRegularExpression(pattern: patternNormal, options: .caseInsensitive)
    #endif

    return regex?.firstMatch(in: self, options: [], range: NSMakeRange(0, self.characters.count)) != nil

এটি উভয় ম্যাকস এবং উবুন্টুতে সাফল্যের সাথে সংকলন করে।


লক্ষ্য করুন NSRange দৈর্ঘ্য সম্পত্তি characters.count পরিবর্তে স্ট্রিং utf16.count ব্যবহার করা উচিত
লিও Dabus

0

সেরা ফলাফল সহ সেরা সমাধান

সুইফট 4.x

 extension String {

        func validateAsEmail() -> Bool {
            let emailRegEx = "(?:[a-zA-Z0-9!#$%\\&‘*+/=?\\^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%\\&'*+/=?\\^_`{|}" +
                "~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\" +
                "x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-" +
                "z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5" +
                "]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-" +
                "9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21" +
            "-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"

            let emailTest = NSPredicate(format:"SELF MATCHES[c] %@", emailRegEx)
            return emailTest.evaluate(with: self)
        }
    }

0

আমি এক্সটেনশন তৈরি করতে চাই

   extension String {

func isValidateEmail() -> Bool {
    let emailFormat = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
    let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailFormat)
    return emailPredicate.evaluate(with: self)
}

}

ব্যবহার:

if emailid.text!.isValidateEmail() == false(){
 //do what ever you want if string is not matched.

}

0

সুইফট 5

 func isValidEmailAddress(emailAddressString: String) -> Bool {

 var returnValue = true
 let emailRegEx = "[A-Z0-9a-z.-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,3}"

 do {
        let regex = try NSRegularExpression(pattern: emailRegEx)
        let nsString = emailAddressString as NSString
        let results = regex.matches(in: emailAddressString, range: NSRange(location: 0, length: nsString.length))

        if results.count == 0
        {
            returnValue = false
        }

    } catch let error as NSError {
        print("invalid regex: \(error.localizedDescription)")
        returnValue = false
    }

    return  returnValue
}

তারপর:

let validEmail = isValidEmailAddress(emailAddressString: "your@email.com")
print(validEmail)

0

গুগল ইমেইলের মতো পারফেক্ট রেজেক্স

"^[A-Z0-9a-z][a-zA-Z0-9_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"

2
যে কেউ আমার উত্তরটি ভোট দেয়, দয়া করে আপনার জ্ঞান পরীক্ষা করে দেখুন। আমি এই কোডটিকে অনেক কোডে প্রয়োগ করেছি এবং আমার আমার বন্ধুরা এই রেজেক্সটি ব্যবহার করছে এবং এটি দুর্দান্ত কাজ করে..আমার উত্তরটি দয়া করে ভাল করে মন্তব্য করুন এবং আমাকে জানতে দিন যে এই রেজেক্সটির মধ্যে কী ভুল আছে।
ami rt

আমি মনে করি আমি উত্তর দিতে পারি: আপনার রেজেক্সটি সহজ এবং আরএফসির সাথে মেলে না। উদাহরণস্বরূপ, ইমেলগুলির প্রথম অংশে উদ্ধৃতি এবং এমনকি স্পেস থাকতে পারে! এ haacked.com/archive/2007/08/21/...
Hugal31

1
দুঃখিত, ভাই, আমি মনে করি আপনার গুগল ইমেল বৈধতা যাচাই করা উচিত, কোনও ইমেলের প্রথম অংশে স্পেস যুক্ত করার কোনও উপায় নেই এবং যদি আমার রেজেক্সটি ভুল হয় তবে কেন কেউ লিখতে এবং নিখুঁত রেজিেক্স পোস্ট করে না।
ami rt

আরএফসি 5322 অনুসারে, "হ্যালো ওয়ার্ল্ড!" @ উদাহরণ.com একটি বৈধ ইমেল। প্রকৃতপক্ষে, কোনও বৈধ রেজিেক্স তৈরি করা প্রায় অসম্ভব। প্রতিটি মেল সরবরাহকারী গুগল ইমেল বৈধতা আটকে থাকবে না।
হুগাল 31

1
আমি যা শুনতে চাই তা চালিয়ে যায় এবং আমি কেন সাহসী শিরোনামে উল্লেখ করেছি যে উপরের রেজেক্স গুগলের মতো। ধন্যবাদ
ami rt

-1

অথবা ইউআইটিেক্সটফিল্ডের alচ্ছিক পাঠ্যের জন্য আপনার এক্সটেনশন থাকতে পারে:

ব্যবহারবিধি:

if  emailTextField.text.isEmailValid() {
      print("email is valid")
}else{
      print("wrong email address")
}

এক্সটেনশান:

extension Optional where Wrapped == String {
    func isEmailValid() -> Bool{
        guard let email = self else { return false }
        let emailPattern = "[A-Za-z-0-9.-_]+@[A-Za-z0-9]+\\.[A-Za-z]{2,3}"
        do{
            let regex = try NSRegularExpression(pattern: emailPattern, options: .caseInsensitive)
            let foundPatters = regex.numberOfMatches(in: email, options: .anchored, range: NSRange(location: 0, length: email.count))
            if foundPatters > 0 {
                return true
            }
        }catch{
            //error
        }
        return false
    }
}

নোট করুন যে এনএসরেঞ্জ দৈর্ঘ্যের সম্পত্তিটিতে অক্ষরগুলির পরিবর্তে স্ট্রিং utf16.count ব্যবহার করা উচিত
গণনা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.