如何在 iOS Swift4.2 中验证名称(John D'Largy)?

How to validate a name(John D'Largy) in iOS Swift4.2?

我尝试了堆栈溢出中的所有可能性(link1, )答案对我没有用。

我正在使用以下正则表达式来验证名字。在在线案例 (OnlineRegex) 中,它工作正常,但当我在移动设备中实施时,它无法正常工作。

请帮帮我

func isValidName() -> Bool {
    let RegEx = "^[a-zA-Z]+(([\'\,\.\-\ ][a-zA-Z ])?[a-zA-Z]*)*$"
    let Test = NSPredicate(format:"SELF MATCHES %@", RegEx)
    return Test.evaluate(with: self)
}

我将上面的函数调用为

let str = "John D'Largy"
        if str.isValidName(){
            print("Valid")
        }else{ print("Not valid")}

输出 : "Valid"

我正在调用相同的函数来验证我收到的第一个文本字段 "Not valid"

if firstNameTxt.text.isValidName(){
            print("Valid")
        }else{ print("Not valid")}

我在移动关键字中输入了相同的文字

OutPut: "Not valid"

我是不是漏了什么?还是我必须更改正则表达式值?。 任何建议。

提前致谢。

See, I tried your code in the playground and changed the syntax a bit but not the logic

Below is the code snippet, try running that in your playground

    func isValidName(str: String) -> Bool {
       let RegEx = "^[a-zA-Z]+(([\'\,\.\-\ ][a-zA-Z ])?[a-zA-Z]*)*$"
       let Test = NSPredicate(format:"SELF MATCHES %@", RegEx)
       return Test.evaluate(with: str)
    }

    func check(){
       let str = "John D'Largy"

       if isValidName(str: str){
           print("Valid")
       }else{
           print("Not valid")
       }
    }

check()

希望对您有所帮助!

您可以使用

(?:[a-zA-Z]+(?:['‘’,.\s-]?[a-zA-Z]+)*)?

您的代码已经需要完整的字符串匹配,您不需要像 ^ / \A$ / \z.[=25= 这样的显式锚点]

此外,由于单引号会自动转换为弯引号,您应该将它们添加到正则表达式或 .

关于 thi regex 最重要的事情之一是它应该能够匹配 部分 正确的字符串,因此所有部分都是可选的(即它们可以匹配 0 个字符).它包含一个可选的非捕获组 ((?:...)?),匹配 1 次或 0 次出现。

正则表达式详细信息

  • [a-zA-Z]+ - 1 个或多个字母
  • (?: - 内部非捕获组的开始:
    • ['‘’,.\s-]? - 1 或 0 个空格、单引号、连字符
    • [a-zA-Z]+ - 1+ 个字母
  • )* - 0 次或多次重复。

注意:要匹配任何 Unbicode 字母,请使用 \p{L} 而不是 [a-zA-Z]

图表: