ExtensionString.swift 4.2 KB

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