gpt4 book ai didi

ios - 正则表达式卡在 iPhone 中用于电子邮件验证

转载 作者:可可西里 更新时间:2023-11-01 05:45:17 24 4
gpt4 key购买 nike

我使用以下正则表达式进行电子邮件验证:

NSString *emailRegEx = @"([0-9a-zA-Z]([-.[A-Za-z0-9_]]*[0-9a-zA-Z_])*@([0-9a-zA-Z][-[A-Za-z0-9_]]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})";
NSPredicate *emailRegexPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", firstPartRegex];
return [emailRegexPredicate evaluateWithObject:input]

我遇到的问题是,当我输入一个在 @ 符号前有大约 20-25 个以上字符的无效电子邮件时,iPhone 挂起。

例如,电子邮件地址 "Abcdefghijklmnopqrstuvwxyz@gmail" 将导致 iPhone 挂起。但是 "Abcdefghijklmnopqrstuvwxyz@gmail.com" 将正常验证。 "Abcdefghijklmnopqrst@gmail" 将立即返回无效。

我注意到大约 20 个字符,正则表达式返回无效需要更长的时间,然后递增 1 个字符将花费看似指数级的时间。

好像跟这部分表达式有关系:

([-.[A-Za-z0-9_]]*[0-9a-zA-Z_])*

但我无法想出一个能提供相同结果的替代方案。

有什么想法吗?

最佳答案

a project on github有一个经过良好测试的电子邮件正则表达式 - 自己制作一个非常非常困难 - 请参阅 this link on testing various patterns .该项目有一个方法 isValidEmail,您可以迭代调用它(比如用户点击信息),这样您就可以启用提交按钮等。

您可以在 this previous answer 中阅读有关该问题和其他解决方案的更多信息.

编辑:似乎正则表达式中的歧义会导致需要无限时间才能解决的循环。自从发布这个答案以来,我一直在研究一个“近乎完美”的正则表达式来验证电子邮件,所有这些都是基于标准的。 github项目也更新了,验证RegEx为:

@"^(?:(?:(?:(?: )(?:(?:(?:\t| )\r\n)?(?:\t| )+))+(?: ))|(?: )+)?(?:(?:(?:[-A-Za-z0-9!#$%&'+/=?^{|}~]+(?:\\.[-A-Za-z0-9!#$%&'*+/=?^_{|}~]+)*)|(?:\"(?:(?:(?:(?: )*(?:(?:[!#-Z^-~]|\[|\])|(?:\\(?:\t|[ -~]))))+(?: )*)|(?: )+)\"))(?:@)(?:(?:(?:A-Za-z0-9?)(?:\.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| )+))+(?: ))|(?: )+)?$"

关于ios - 正则表达式卡在 iPhone 中用于电子邮件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16530683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com