输入字符串的验证是否为CivilID?

时间:2017-05-18 12:09:18

标签: ios swift3 uitextfield

我有一个UITextfield,格式如下。这是我们通常在海湾国家看到的民事身份证。所以我需要在Swift的UITextfield中验证相同的内容。

民事身份证格式 - NYYMMDDNNNNN其中N为数字,YY为出生年份的最后两位数字,MM出生月份,DD出生日期..

请告诉我如何对此进行验证。我目前正在使用目标c代码验证出生日期:

NSString *dateFromTextfield = @"07/24/2013";

   // Convert string to date object
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"MM/dd/yyyy"];// here set format which you want...
    NSDate *date = [dateFormat dateFromString:dateFromTextfield]; 

但是如何对我在swift中需要“NYYMMDDNNNNN”的格式做同样的事情。

1 个答案:

答案 0 :(得分:0)

首先,允许你的文本字段输入只是数字并给出限制,在你的情况下需要12个字符,所以给12个字符限制 - 下面是代码 -

func textField(_ textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{
     let currentCharacterCount = textField.text?.characters.count

     if (range.length + range.location > currentCharacterCount!){
          return false
     }
     let newLength = currentCharacterCount! + string.characters.count - range.length

     let allowedCharacters = CharacterSet.decimalDigits
     let characterSet = CharacterSet(charactersIn: string)

     return newLength <= 12 && allowedCharacters.isSuperset(of: characterSet)
}

之后,只需验证用户出生日期和输入出生日期是否正确,如下所示提交按钮操作 -

func submitBtnTapped() 
{
    //Let say your civicID is like below
    let civicID = "113072489656"

    var birthDate = String(civicID.characters.prefix(7))
    birthDate.remove(at: birthDate.startIndex)

    let userBirthDate =  "07/24/2013"

    let formatter = DateFormatter()
    formatter.dateFormat = "MM-dd-yyyy"
    let date = formatter.date(from: userBirthDate)
    print("\(String(describing: date))")

    formatter.dateFormat = "yyMMdd"
    let actualBirthDate = formatter.string(from: date!)
    print(actualBirthDate)

    if birthDate == actualBirthDate
    {
         print("true")
    }else {
         print(“false”)
    }
}

希望它对你有用。