在Swift中格式化电话号码

一旦用户开始将电话号码键入此格式类型,0 (555) 444 66

77并且我可以正常工作,我就在格式化文本文件中的文本,但是一旦我从服务器上获得了电话号码,我就这样得到了,05554446677所以请您告诉我如何编辑它我从服务器获得相同格式的文件吗?

输入开始后的代码:

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

if textField == phoneNumberTextField{

var newString = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string)

var components = newString.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)

var decimalString = "".join(components) as NSString

var length = decimalString.length

var hasLeadingOne = length > 0 && decimalString.characterAtIndex(0) == (1 as unichar)

if length == 0 || (length > 11 && !hasLeadingOne) || length > 12{

var newLength = (textField.text as NSString).length + (string as NSString).length - range.length as Int

return (newLength > 11) ? false : true

}

var index = 0 as Int

var formattedString = NSMutableString()

if hasLeadingOne{

formattedString.appendString("1 ")

index += 1

}

if (length - index) > 1{

var zeroNumber = decimalString.substringWithRange(NSMakeRange(index, 1))

formattedString.appendFormat("%@ ", zeroNumber)

index += 1

}

if (length - index) > 3{

var areaCode = decimalString.substringWithRange(NSMakeRange(index, 3))

formattedString.appendFormat("(%@) ", areaCode)

index += 3

}

if (length - index) > 3{

var prefix = decimalString.substringWithRange(NSMakeRange(index, 3))

formattedString.appendFormat("%@ ", prefix)

index += 3

}

if (length - index) > 3{

var prefix = decimalString.substringWithRange(NSMakeRange(index, 2))

formattedString.appendFormat("%@ ", prefix)

index += 2

}

var remainder = decimalString.substringFromIndex(index)

formattedString.appendString(remainder)

textField.text = formattedString as String

return false

}else{

return true

}

}

回答:

用String中的字符进行操作不是很简单。您需要遵循以下条件:

let s = "05554446677"

let s2 = String(format: "%@ (%@) %@ %@ %@", s.substringToIndex(s.startIndex.advancedBy(1)),

s.substringWithRange(s.startIndex.advancedBy(1) ... s.startIndex.advancedBy(3)),

s.substringWithRange(s.startIndex.advancedBy(4) ... s.startIndex.advancedBy(6)),

s.substringWithRange(s.startIndex.advancedBy(7) ... s.startIndex.advancedBy(8)),

s.substringWithRange(s.startIndex.advancedBy(9) ... s.startIndex.advancedBy(10))

)

let s = "05554446677"

let s2 = String(format: "%@ (%@) %@ %@ %@", s.substringToIndex(advance(s.startIndex, 1)),

s.substringWithRange(advance(s.startIndex, 1) ... advance(s.startIndex, 3)),

s.substringWithRange(advance(s.startIndex, 4) ... advance(s.startIndex, 6)),

s.substringWithRange(advance(s.startIndex, 7) ... advance(s.startIndex, 8)),

s.substringWithRange(advance(s.startIndex, 9) ... advance(s.startIndex, 10))

)

代码将打印 0 (555) 444 66 77

以上是 在Swift中格式化电话号码 的全部内容, 来源链接: utcz.com/qa/413947.html

回到顶部