4

メールの検証に次の正規表現を使用しています。

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_])*

しかし、同じ結果をもたらす代替案を思いつくことはできません。

何か案は?

4

1 に答える 1