UItextField电话号码格式

时间:2013-08-19 18:37:22

标签: ios uitextfield nsregularexpression

我有三个文本字段,分别是家庭电话,工作电话和手机。我需要为这些字段进行验证和数字格式化。下面显示的是条件。

家庭电话和工作电话文本字段不应接受超过10位且少于8位数字。字段应仅接受数字。数字的格式应该是 xxxx-xxxx(如果是8位数) xx-xxxx-xxxx(如果是10位数)

移动电话号码字段不应超过10位数。字段应仅接受数字。数字的格式应该是 XXXX-XXX-XXX

我不知道如何实现这一目标。请帮帮我。

2 个答案:

答案 0 :(得分:1)

我认为你可以通过以下方式实现这一目标:

  1. 在uitextfield中捕获文本更改事件。根据您想要的格式,在4个字符之后添加短划线,依此类推7个字符,依此类推。
  2. 使用正则表达式以破折号验证整个数字字符串。 (例如:对于xxxx-xxxx格式使用'[0-9] {4} - [0-9] {4}')

答案 1 :(得分:0)

稍晚但它可能有助于其他一些,格式化XXX-XXX-XXXX格式的UITextfield文本

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

        var number = textField.text  as NSString? ?? ""
        number = number.replacingCharacters(in: range, with: string) as NSString
        number = number.replacingOccurrences(of: "-", with: "") as NSString

        if (number.length > 10) {
            return false;
        }
        self.resetBtnState(numberLength: number.length)
        var groupSize = 3
        let separator = "-"
        if string.characters.count == 0 {
            groupSize = 5
        }
        let numformatter = NumberFormatter()
        numformatter.groupingSeparator = separator
        numformatter.groupingSize = groupSize
        numformatter.usesGroupingSeparator = true
        numformatter.secondaryGroupingSize = 3
        if var number = textField.text, string != "" {
            number = number.replacingOccurrences(of: separator, with: "")
            if let doubleVal = Double(number) {
                let requiredString = numformatter.string(from: NSNumber.init(value: doubleVal))
                textField.text = requiredString
            }
        }
        return true
    }