【问题标题】:UItextField Phone number formattingUItextField 电话号码格式
【发布时间】:2013-08-19 18:37:22
【问题描述】:

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

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

手机号码字段不应接受超过 10 位数字。这些字段应该只接受数字。数字的格式应该是 xxxx-xxx-xxx

我不确定如何实现这一点。请帮帮我。

【问题讨论】:

  • 您是打算自己添加破折号还是用户会这样做?
  • 应该自动添加破折号
  • 您是否只打算在一个国家/地区销售您的应用程序?您可能需要考虑支持更多格式。

标签: ios uitextfield nsregularexpression


【解决方案1】:

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

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

【讨论】:

  • 让生活更简单,在添加破折号之前进行验证。
【解决方案2】:

有点晚了,但它可能对其他人有所帮助,将 UITextfield 文本格式化为 XXX-XXX-XXXX 格式

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
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2014-04-01
    • 2012-08-11
    • 2012-07-16
    • 2016-05-04
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多