ExtensionString.swift 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import Foundation
  2. import UIKit
  3. import RNCryptor
  4. import CryptoSwift
  5. extension String {
  6. func contains(find: String) -> Bool{
  7. return self.range(of: find) != nil
  8. }
  9. func containsIgnoringCase(find: String) -> Bool{
  10. return self.range(of: find, options: .caseInsensitive) != nil
  11. }
  12. var isEmail: Bool {
  13. let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,20}"
  14. let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
  15. return emailTest.evaluate(with: self)
  16. }
  17. var isPW: Bool {
  18. let pwRegEx = "^[a-zA-Z0-9!@.#$%^&*?_~]{4,16}$"
  19. let pwTest = NSPredicate(format:"SELF MATCHES %@", pwRegEx)
  20. return pwTest.evaluate(with: self)
  21. }
  22. var hangul: String {
  23. get {
  24. let hangle = [
  25. ["ㄱ","ㄲ","ㄴ","ㄷ","ㄸ","ㄹ","ㅁ","ㅂ","ㅃ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"],
  26. ["ㅏ","ㅐ","ㅑ","ㅒ","ㅓ","ㅔ","ㅕ","ㅖ","ㅗ","ㅘ","ㅙ","ㅚ","ㅛ","ㅜ","ㅝ","ㅞ","ㅟ","ㅠ","ㅡ","ㅢ","ㅣ"],
  27. ["","ㄱ","ㄲ","ㄳ","ㄴ","ㄵ","ㄶ","ㄷ","ㄹ","ㄺ","ㄻ","ㄼ","ㄽ","ㄾ","ㄿ","ㅀ","ㅁ","ㅂ","ㅄ","ㅅ","ㅆ","ㅇ","ㅈ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"]
  28. ]
  29. return characters.reduce("") { result, char in
  30. if case let code = Int(String(char).unicodeScalars.reduce(0){$0 + $1.value}) - 44032{
  31. if code > -1 && code < 11172{
  32. let cho = code / 21 / 28, jung = code % (21 * 28) / 28, jong = code % 28;
  33. return result + hangle[0][cho] + hangle[1][jung] + hangle[2][jong]
  34. }
  35. }
  36. return result + String(char)
  37. }
  38. }
  39. }
  40. var localized: String {
  41. return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
  42. }
  43. //String Equal 비교
  44. func isEqualToString(find:String) -> Bool {
  45. return String(format:self) == find
  46. }
  47. }
  48. extension String {
  49. var delComma: String {
  50. let number = Double(self)
  51. let formatter:NumberFormatter = NumberFormatter()
  52. formatter.numberStyle = .decimal
  53. formatter.groupingSeparator = ","
  54. let commoaString = formatter.string(for: number)
  55. return commoaString ?? "0"
  56. }
  57. }
  58. extension String {
  59. func fromDate(format:String) -> Date? {
  60. let formmater:DateFormatter = {
  61. let formatter = DateFormatter()
  62. formatter.locale = Locale.current
  63. formatter.dateFormat = format
  64. return formatter
  65. }()
  66. return formmater.date(from: self)
  67. }
  68. }
  69. extension String{
  70. func aesEncrypt() -> String{
  71. do {
  72. let iv: Array<UInt8> = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00]
  73. let aes = try AES(key: Array("3c837d501a8f49b1".utf8), blockMode: CBC(iv: iv), padding: .pkcs7)
  74. let encrypted = try aes.encrypt([UInt8](self.data(using: .utf8)!))
  75. // return encrypted.toHexString()
  76. return Data(encrypted).base64EncodedString()
  77. } catch {
  78. print(error)
  79. }
  80. return "";
  81. }
  82. // func aesEncrypt() throws -> String {
  83. // let encrypted = try AES(key: "3c837d501a8f49b1", iv: "0000000000000000", padding: .pkcs7).encrypt([UInt8](self.data(using: .utf8)!))
  84. // return Data(encrypted).base64EncodedString()
  85. // }
  86. // func aesEncrypt(key: String = "3c837d501a8f49b1", iv: String = "0000000000000000") -> String {
  87. // if let data = self.data(using: String.Encoding.utf8) {
  88. // do {
  89. //
  90. // let enc: Array<UInt8> = try AES(key: Array(key.utf8), blockMode: CBC(iv: Array(iv.utf8)), padding: .pkcs7).encrypt(data.bytes)
  91. //// let enc = try AES(key: key, iv: iv, padding: .pkcs7).encrypt(data.bytes)
  92. // let encData = Data(bytes: enc, count: Int(enc.count))
  93. // let base64String: String = encData.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0));
  94. //// let base64String: String = encData.base64EncodedString()
  95. // return base64String
  96. // }
  97. // catch let error {
  98. // print(error.localizedDescription)
  99. // return ""
  100. // }
  101. // }
  102. // return ""
  103. // }
  104. func encryptWithKey(key:String) -> String? {
  105. guard let data = self.data(using: .utf8) else{ return nil }
  106. let encData = RNCryptor.encrypt(data: data, withPassword: key)
  107. return encData.base64EncodedString()
  108. }
  109. func decryptWithKey(key:String) -> String? {
  110. guard let data = Data(base64Encoded: self) else{ return nil }
  111. do{
  112. let decData = try RNCryptor.decrypt(data: data, withPassword: key)
  113. return String(data: decData, encoding: .utf8)
  114. }catch{
  115. print(error)
  116. }
  117. return nil
  118. }
  119. }
  120. extension String {
  121. subscript(value: NSRange) -> Substring {
  122. return self[value.lowerBound..<value.upperBound]
  123. }
  124. }
  125. extension String {
  126. subscript(value: CountableClosedRange<Int>) -> Substring {
  127. get {
  128. return self[index(at: value.lowerBound)...index(at: value.upperBound)]
  129. }
  130. }
  131. subscript(value: CountableRange<Int>) -> Substring {
  132. get {
  133. return self[index(at: value.lowerBound)..<index(at: value.upperBound)]
  134. }
  135. }
  136. subscript(value: PartialRangeUpTo<Int>) -> Substring {
  137. get {
  138. return self[..<index(at: value.upperBound)]
  139. }
  140. }
  141. subscript(value: PartialRangeThrough<Int>) -> Substring {
  142. get {
  143. return self[...index(at: value.upperBound)]
  144. }
  145. }
  146. subscript(value: PartialRangeFrom<Int>) -> Substring {
  147. get {
  148. return self[index(at: value.lowerBound)...]
  149. }
  150. }
  151. func index(at offset: Int) -> String.Index {
  152. return index(startIndex, offsetBy: offset)
  153. }
  154. }