29

この関数を String Extension で作成しましたが、エラーがわかりません。

func isEmail() -> Bool {
    let regex = NSRegularExpression(pattern: "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$", options: [.CaseInsensitive])

    return regex.firstMatchInString(self, options: nil, range: NSMakeRange(0, characters.count)) != nil
}

エラーは次のとおりです。

呼び出しはスローできますが、「try」とマークされておらず、エラーは処理されません

4

4 に答える 4

13

これは、その初期化子が例外をスローできるようになったためです。そのため、それtryを呼び出してcatch例外に備える必要があります。tryこれを行うには、イニシャライザの前に追加し、メソッドにthrows.

extension String {
    func isEmail() throws -> Bool {
        let regex = try NSRegularExpression(pattern: "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$", options: [.CaseInsensitive])

        return regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, characters.count)) != nil
    }
}

次に、メソッドを呼び出したい場合は、doブロック内から実行し、発生するエラーをキャッチします。

do {
    try "person@email.com".isEmail()
} catch {
    print(error)
}

注: また、パラメーターが nil 値を取ることができなくなっregex.firstMatchInStringたという事実を反映するように、呼び出しを更新しました。options

于 2015-06-15T12:53:55.190 に答える
3

気に入らない場合は、 catch を試してください:

extension String {
    func matchPattern(patStr:String)->Bool {
            var isMatch:Bool = false
            do {
                let regex = try NSRegularExpression(pattern: patStr, options: [.CaseInsensitive])
                let result = regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, characters.count))

                if (result != nil)
                {
                    isMatch = true
                }
            }
            catch {
                isMatch = false
            }
            return isMatch
    }
}    

チェック文字列が正しい電子メール形式です:

let emailInput:String = "checkthis@gmail.com"
if (emailInput.matchPattern("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$"))
{
     print("this is e-mail!")
}
于 2015-12-30T04:36:26.680 に答える
1

string.rangeOfString を使用して、オプションを .RegularExpressionSearch に指定できます。それは簡単です。

func isEmail(email: String) -> Bool {
    return email.rangeOfString("^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}$", options: .RegularExpressionSearch) != nil
}
于 2016-05-11T09:10:43.913 に答える