// // StringExtension.swift // GMERemittance // // Created by Sujal on 12/13/17. // Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved. // import Foundation import UIKit enum CurrencyType { case usd case krw case `nil` var front: String { switch self { case .usd: return "$ " case .krw: return "₩ " case .nil: return "" } } var end: String { switch self { case .usd: return " USD" case .krw: return " JPY" case .nil: return "" } } } extension String { var imageURLInResource: String { switch self { case "001": return "ic_cap" case "002": return "ic_tshirt" case "003": return "ic_glass" case "004": return "ic_watch" default: return "" } } var isBlank: Bool { return trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).isEmpty } func toBase64() -> String { let data = self.data(using: String.Encoding.utf8) return data!.base64EncodedString() } func removeWhitespacesInBetween() -> String { return components(separatedBy: .whitespaces).joined() } func stringRemovingComma() -> String { return extract(regex: "[0-9.]") } func getDateFromDateTime() -> String { return components(separatedBy: .whitespaces)[0] } func removeSpacesTrailingPreceding() -> String { return trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) } } extension String { func likeCommaMoney() -> String? { if Double(self) == nil { return nil } return Utility.getCommaSeperatedString(numberString: self) } func isEmail() -> Bool { let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}" let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx) return emailPred.evaluate(with: self) } func extract(regex: String) -> String { do { let regex = try NSRegularExpression(pattern: regex) let nsString = self as NSString let results = regex.matches(in: self, range: NSRange(location: 0, length: nsString.length)) return results.map { nsString.substring(with: $0.range)}.joined() } catch let error { print("invalid regex: \(error.localizedDescription)") return self } } func decimalToCurrency(as type: CurrencyType = .nil, isFront: Bool = false) -> String { let text = self.extract(regex: "[0-9.]") guard let number = Double(text) else { return isFront ? "\(type.front)\(self)" : "\(self)\(type.end)" } let nsNumber = NSNumber(value: number) let currencyFormatter = NumberFormatter() currencyFormatter.locale = Locale(identifier: "en_US") currencyFormatter.numberStyle = .decimal let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber) if isFront { return "\(type.front)\(commaSeperatedNumberString ?? self)" } else { return "\(commaSeperatedNumberString ?? self)\(type.end)" } } func currencyToDecimal() -> String { return self.extract(regex: "[0-9.]") } } extension String{ func validateRegex(regex: String) -> Bool{ let predicate = NSPredicate(format: "SELF MATCHES %@", regex) return predicate.evaluate(with: self) } } extension String { func attributedText(color: UIColor, font: UIFont) -> NSMutableAttributedString { let range = (self as NSString).range(of: self) let attributedString = NSMutableAttributedString(string:self) attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range) attributedString.addAttribute(NSAttributedString.Key.font, value: font, range: range) return attributedString } }