【问题标题】:Swift RegEx InternationalSwift RegEx 国际
【发布时间】:2015-05-04 04:48:44
【问题描述】:

在用户在日期选择器中输入生日后,我正在正则表达式中检查有效的生日。

问题是,如果手机是俄语、中文或使用其他字符的任何其他语言,RegEx 将在月份到期。

是否有一种简单的方法可以将月份转换为数字 (1-12),即使月份显示为字母并且也可以使用任何语言?

如果有这样的方法,不管简单与否,检查用户是否正好是 13 岁或以上,而不是仅仅使用年份会容易得多。

func isValidBirthday(testStr4:String) -> Bool {
    println("validate birthday: \(testStr4)")

    let birthdayRegEx = "[A-Z0-9a-z, .]+(19[0-9][0-9]|200[0-3]|2003)"

    let birthdayTest = NSPredicate(format: "SELF MATCHES %@", birthdayRegEx)
    return birthdayTest.evaluateWithObject(testStr4)

}

【问题讨论】:

  • 为什么不使用 'NSDate` 而不是 'String'
  • 从日期选择器中选择一个日期返回一个字符串,有没有办法让它返回一个 NSDate?
  • date 属性返回 NSDate
  • 回应之前的评论,如果看起来真的很难,那你就做错了。

标签: ios regex swift date


【解决方案1】:

我有一个用于检查正则表达式的实用程序类,在我的很多项目中使用

class Regex {

    let internalExpression: NSRegularExpression!
    let pattern: String

    init(_ pattern: String) {
        self.pattern = pattern
        var error: NSError?
        internalExpression = NSRegularExpression(pattern: pattern, options: .CaseInsensitive, error: &error)
    }

    func test(input: String) -> Bool {
        if let matches = internalExpression?.matchesInString(input, options: nil, range:NSMakeRange(0, count(input))) {
            return matches.count > 0
        }
        return false
    }
}

对于您的情况:

if Regex("^(19|20)\\d\\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$").test(DateStringValue) {
    // Code to be executed in here
}

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多