swiftSwift编程Swift

Swift-NSString常用扩展

2018-07-16  本文已影响1人  我在鄱阳湖边

//判断是否是中文

func isChinese() -> Bool {

    let match = "(^[\u{4e00}-\u{9fa5}]+$)"

    let predicate = NSPredicate(format: "SELF matches %@", match)

    return predicate.evaluate(with: self)

}

//判断手机号码格式是否正确

class func valiMobile(_ mobile: String?) -> Bool {

        // 130-139  150-153,155-159  180-189  145,147  170,171,173,176,177,178

    let phoneRegex = "^((13[0-9])|(15[^4,\\D])|(18[0-9])|(14[57])|(17[013678]))\\d{8}$"

    let phoneTest = NSPredicate(format: "SELF MATCHES %@", phoneRegex)

    return phoneTest.evaluate(with: mobile)

}

// 判断是否是数字

class func validateNumber(_ number: String?) -> Bool {

    var res = true

    let tmpSet = CharacterSet(charactersIn: "0123456789")

    let i: Int = 0

    while i < (number?.count ?? 0) {

        let string = (number as NSString?)?.substring(with: NSRange(location: i, length: 1))

        let range: NSRange? = (string as NSString?)?.rangeOfCharacter(from: tmpSet)

        if Int(range?.length ?? 0) == 0 {

            res = false

            break

        }

        i += 1

    }

    return res

}

// 判断是否为中文

class func isChinese(_ string: String?) -> Bool {

    let c = unichar(string?[string?.index(string?.startIndex, offsetBy: 0)] ?? 0)

    if c >= 0x4e00 && c <= 0x9fff {

        return true

    } else {

        return false

    }

    return true

}

//格式化电话号码 136 2222 2222

class func formatPhoneNumber(_ string: String?) -> String? {

    var str1 = string ?? ""

    str1.insert(contentsOf: " ", at: s.index(s.startIndex, offsetBy: 3))

    str1.insert(contentsOf: " ", at: s.index(s.startIndex, offsetBy: 8))

    return str1

}

//是否是一个字符

class func validateCharacter(_ string: String?) -> Bool {

    let cStr = Int8(string?.utf8CString ?? 0)

    if strlen(cStr) == 1 {

        return true

    }

    return false

}

// 判断身份证号是否正确

func judgeIdentityStringValid(_ identityString: String?) -> Bool {

    if (identityString?.count ?? 0) != 18 {

        return false

    }

        // 正则表达式判断基本 身份证号是否满足格式

    let regex2 = "^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)$"

    let identityStringPredicate = NSPredicate(format: "SELF MATCHES %@", regex2)

    //如果通过该验证,说明身份证格式正确,但准确性还需计算

    if !identityStringPredicate.evaluate(with: identityString) {

        return false

    }

        //** 开始进行校验 *//

        //将前17位加权因子保存在数组里

    let idCardWiArray = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"]

        //这是除以11后,可能产生的11位余数、验证码,也保存成数组

    let idCardYArray = ["1", "0", "10", "9", "8", "7", "6", "5", "4", "3", "2"]

        //用来保存前17位各自乖以加权因子后的总和

    var idCardWiSum: Int = 0

    for i in 0..<17 {

        let subStrIndex = Int(truncating: ((identityString as NSString?)?.substring(with: NSRange(location: i, length: 1)) ?? "")) ?? 0

        let idCardWiIndex = Int(truncating: idCardWiArray[i]) ?? 0

        idCardWiSum += subStrIndex * idCardWiIndex

    }

        //计算出校验码所在数组的位置

    let idCardMod: Int = idCardWiSum % 11

        //得到最后一位身份证号码

    let idCardLast = (identityString as NSString?)?.substring(with: NSRange(location: 17, length: 1))

    //如果等于2,则说明校验码是10,身份证号码最后一位应该是X

    if idCardMod == 2 {

        if !(idCardLast == "X") || (idCardLast == "x") {

            return false

        }

    } else {

        //用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码

        if !(idCardLast == idCardYArray[idCardMod]) {

            return false

        }

    }

    return true

}

// 时间戳转时间

convenience init(fromDateString dateStr: String?) {

    let confromTimesp = Date(timeIntervalSince1970: TimeInterval(Int(truncating: dateStr ?? "") ?? 0))

    let formatter = DateFormatter()

    formatter.dateFormat = "YY-MM-dd HH:mm"

    let confromTimespStr = formatter.string(from: confromTimesp)

    return confromTimespStr

}

class func getAgeForm(_ age: Int) -> String? {

    let mouthArr = ["0个月", "1个月", "2个月", "3个月", "4个月", "5个月", "6个月", "7个月", "8个月", "9个月", "10个月", "11个月", "12个月"]

    let yearArr = ["0岁", "1岁", "2岁", "3岁", "4岁", "5岁", "6岁", "7岁"]

    let mouthIndex: Int = age % 12

    let yearIndex: Int = age / 12

    let mouth = mouthArr[mouthIndex]

    let year = yearArr[yearIndex]

    var ageText: String

    if age < 12 {

        ageText = "\(mouth)"

    } else if age == 12 {

        ageText = "1岁"

    } else {

        ageText = "\(year)\(mouth)"

    }

    return ageText

}

class func cachePathWithfileName(_ filename: String?) -> String? {

    return URL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).last ?? "").appendingPathComponent("\(filename ?? "").plist").absoluteString

}

// 根据订单创建时间获得订单的倒计时数

class func getRemainTime(with closeTime: String?) -> Int {

    var closeTime = closeTime

    let date = Date()

        // 当前时间

        //    NSDateFormatter *formate = [[NSDateFormatter alloc] init];

        //    formate.dateFormat = @"YYMMddHHmmss";

        //    NSString *formatDate = [formate stringFromDate:date];

    let timeSp = String(format: "%.0f", date.timeIntervalSince1970)

    // 时间差 剩余时间 关闭时间-当前时间

    if (closeTime?.count ?? 0) > 10 {

        closeTime = (closeTime as NSString?)?.substring(with: NSRange(location: 0, length: 10))

    }

    let timeLast = Int(truncating: closeTime ?? "") ?? 0 - Int(truncating: timeSp) ?? 0

    return timeLast

}

// 得到当前的时间戳

class func getCurrentTime() -> String? {

    let formatter = DateFormatter()

    formatter.dateStyle = .medium

    formatter.timeStyle = .short

    formatter.dateFormat = "YYYY-MM-dd HH:mm:ss SSS"

        // ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制

        //设置时区,这个对于时间的处理有时很重要

    let timeZone = NSTimeZone(name: "Asia/Shanghai")

    if let aZone = timeZone {

        formatter.timeZone = aZone as TimeZone

    }

    let datenow = Date()

        //现在时间,你可以输出来看下是什么格式

    let timeSp = "\(Int(datenow.timeIntervalSince1970) * 1000)"

    return timeSp

}

上一篇 下一篇

猜你喜欢

热点阅读