【问题标题】:Use regular expression in Swift String.contains() func在 Swift String.contains() func 中使用正则表达式
【发布时间】:2023-03-26 14:11:01
【问题描述】:

在 Swift 中,我有一个字符串变量 thisString。我想检查以确保字符串仅包含字母、数字和/或破折号 (-)。除了这样做:

if ( thisString.contains("$") || thisString.contains("%") ) {
  //reject
} else {
 //accept
}

对于每个不受欢迎的角色,这很荒谬,我无法弄清楚..

理论上,我想用正则表达式做这样的事情:

if ( thisString.contains(regex([^a-zA-Z0-9-]) ) { 
  //reject
} else {
  //accept
}

这可能吗?

谢谢!

【问题讨论】:

    标签: ios swift xcode


    【解决方案1】:

    你很亲密

    if thisString.range(of: "[^a-zA-Z0-9-]", options: .regularExpression) != nil { 
      //reject
    } else {
      //accept
    }
    

    【讨论】:

      【解决方案2】:

      您可以创建一组字符并检查它是否是您的字符串的超集。它比使用正则表达式要快得多。

      let validCharacters: Set = .init("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-")
      
      let string1 = "Lkabo-1"
      let string2 = "Lkabo-2!"
      
      if validCharacters.isSuperset(of: string1) {
          print(true)  // true
      } else {
          print(false)
      }
      if validCharacters.isSuperset(of: string2) {
          print(true)
      } else {
          print(false)  // false
      

      【讨论】:

        【解决方案3】:

        使用NSPredicateString 扩展名。

        extension String {
            enum ValidationType: String {
                case alphabet = "[A-Za-z]+"
                case alphabetWithSpace = "[A-Za-z ]*"
                case alphabetNum = "[A-Za-z-0-9]*"
                case alphabetNumWithDash = "[A-Za-z-0-9\-]*"
            }
            
            func isValid(_ type: ValidationType) -> Bool {
                guard !isEmpty else { return false }
                let regTest = NSPredicate(format: "SELF MATCHES %@", type.rawValue)
                return regTest.evaluate(with: self)
            }
        }
        

        用法

        thisString.isValid(.alphabetNumWithDash)
        

        【讨论】:

          猜你喜欢
          • 2013-02-14
          • 2015-11-30
          • 2020-09-14
          • 2017-04-25
          • 2014-09-24
          • 2021-04-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多