You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

151 lines
3.9 KiB

//
// 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 getIntegersString() -> String {
let text = self.extract(regex: "[0-9.]")
if let endIndex = text.range(of: ".")?.lowerBound {
return "\(text[..<endIndex])"
} else {
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
}
}