从字符串中删除特殊字符。

4
我正在尝试使用iOS应用程序拨打一个电话号码。问题是,该号码的格式如下: po placeAnnotation.mapItem.phoneNumber!
"‎+1 (832) 831-6486"
我想去除一些特殊字符,得到以下结果:
832-831-6486
我使用了以下代码,但它没有删除任何内容:
let charactersToRemove = CharacterSet(charactersIn: "()+-")
var telephone = placeAnnotation.mapItem.phoneNumber?.trimmingCharacters(in: charactersToRemove)

有什么想法吗?

3
trimmingCharacters的文档表示:“从两端删除”。它没有提到嵌入的字符。 - Phillip Mills
那么,我该如何实现我的期望结果? - john doe
6个回答

26
placeAnnotation.mapItem.phoneNumber!.components(separatedBy: CharacterSet.decimalDigits.inverted)
    .joined()

给你!

我测试过,运行良好。输入图像说明


哇!太棒了。尽管它没有完全按照问题所要求的格式进行更改。 - Vignesh
要让iOS拨打字符串中的号码,您需要保留前导的“+”或将其替换为“00”。 - Rein Spijkerman
2
你可以考虑将游乐场代码放在代码示例块中,这样当图片从imgur.com消失时,你的答案就不会受到影响。 - Rein Spijkerman

5
如果您需要类似于CharacterSet但更加灵活的功能,可以使用以下方法:
let phoneNumber = "1 (832) 831-6486"

let charsToRemove: Set<Character> = Set("()+-".characters)
let newNumberCharacters = String(phoneNumber.characters.filter { !charsToRemove.contains($0) })
print(newNumberCharacters) //prints 1 832 8316486

0

Swift 3

func removeSpecialCharsFromString(_ str: String) -> String {
        struct Constants {
            static let validChars = Set("1234567890-".characters)
        }
        return String(str.characters.filter { Constants.validChars.contains($0) })
    }

使用方法

let str : String = "+1 (832) 831-6486"
let newStr : String = self.removeSpecialCharsFromString(str)
print(newStr)

注意:在执行操作后,您可以在字符串中添加所需的有效字符。


0
如果您有包含数字和特殊字符的字符串,可以使用以下代码来删除特殊字符。
let numberWithSpecialChar = "1800-180-0000" 

let actulNumber = numberWithSpecialChar.components(separatedBy: CharcterSet.decimalDigit.inverted).joined()

否则,如果您有字符串格式中的字符和特殊字符,则使用以下代码删除特殊字符。
let charactersWithSpecialChar = "A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal-Panama!" 

let actulString = charactersWithSpecialChar.components(separatedBy: CharacterSet.letters.inverted).joined(separator: " ")

0

我知道这个问题已经有答案了,但是为了以任何方式格式化电话号码,可以使用如下的自定义格式化程序。

class PhoneNumberFormatter:Formatter
{
  var numberFormat:String = "(###) ### ####"

  override func string(for obj: Any?) -> String? {

    if let number = obj as? NSNumber
    {
      var input = number as Int64
      var output = numberFormat
      while output.characters.contains("#")
      {
        if let range = output.range(of: "#", options: .backwards)
        {
           output = output.replacingCharacters(in: range, with: "\(input % 10)")
           input /= 10
        }
        else
        {
          output.replacingOccurrences(of: "#", with: "")
        }
      }
      return output
    }
    return nil
  }

  func string(from number:NSNumber) -> String?
  {
    return string(for: number)
  }

}


let phoneNumberFormatter = PhoneNumberFormatter()
//Digits will be filled backwards in place of hashes. It is easy change the custom formatter in anyway 
phoneNumberFormatter.numberFormat = "###-##-##-##-##"
phoneNumberFormatter.string(from: 18063783889)

-2
NSString *str = @"(123)-456-7890";
NSLog(@"String: %@", str);

// Create character set with specified characters
NSMutableCharacterSet *characterSet = 
  [NSMutableCharacterSet characterSetWithCharactersInString:@"()-"];

// Build array of components using specified characters as separtors
NSArray *arrayOfComponents = [str componentsSeparatedByCharactersInSet:characterSet];

// Create string from the array components
NSString *strOutput = [arrayOfComponents componentsJoinedByString:@""];

NSLog(@"New string: %@", strOutput);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接