解析&承包俄罗斯全名

时间:2015-12-25 10:04:52

标签: ios regex swift

我有几个文本字段用于输入全名和短名称,以及其他数据。我的任务是:

  1. 检查输入的全名是否与标准俄罗斯西里尔文全名模式匹配:
  2. Иванов Иван Иванович(用空格分隔的三个大写的西里尔字符串)

    1. 如果匹配,请根据下面的模式通过自动收缩全名创建另一个字符串,并将其输入相应的文本字段:
    2. Иванов И.И.(第一个字符串,空格,第二个字符串的第一个字符,点,第三个字符串的第一个字符,点)

      1. 如果不匹配,则不执行任何操作。
      2. 目前我使用以下代码:

        let fullNameArray = fullNameField.text!.characters.split{$0 == " "}.map(String.init)
        
        if fullNameArray.count == 3 {
        
          if fullNameArray[0] == fullNameArray[0].capitalizedString && fullNameArray[1] == fullNameArray[1].capitalizedString && fullNameArray[2] == fullNameArray[2].capitalizedString {
        
              shortNameField.text = "\(fullNameArray[0]) \(fullNameArray[1].characters.first!).\(fullNameArray[2].characters.first!)."
           }
        }
        

        我该如何改进?也许正则表达式可以帮助我?如果是这样,你可以发布一些示例代码吗?

1 个答案:

答案 0 :(得分:1)

我目前的解决方案:

do {
   let regex = try NSRegularExpression(pattern: "^\\p{Lu}\\p{Ll}+\\s\\p{Lu}\\p{Ll}+\\s\\p{Lu}\\p{Ll}+$", options: .AnchorsMatchLines)

   if regex.firstMatchInString(fullNameField.text!, options: [], range: NSMakeRange(0, fullNameField.text!.characters.count)) != nil {

      let fullNameArray = fullNameField.text!.characters.split(" ").map(String.init)

      shortNameField.text = "\(fullNameArray[0]) \(fullNameArray[1].characters.first!).\(fullNameArray[2].characters.first!)."
   }
   else {
      shortNameField.text = ""
   }
} catch let error as NSError {
        print(error.localizedDescription)
}

正确处理我的全名模式。