From 321c3d33a39267e977a9caa55ca87297eb9a33e0 Mon Sep 17 00:00:00 2001 From: Manraaj Nijjar Date: Mon, 2 Oct 2017 19:03:32 -0400 Subject: [PATCH 1/5] Base components for word filtering added --- .DS_Store | Bin 6148 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 0 -> 18716 bytes .../xcschemes/xcschememanagement.plist | 14 +++++++++++ ValidationsDemo/Base.lproj/Main.storyboard | 22 ++++++++++++++---- .../TextFieldValidation.swift | 9 +++++++ .../ValidationPreferences.swift | 1 + ValidationsDemo/ViewController.swift | 5 +++- 7 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 ValidationsDemo.xcodeproj/project.xcworkspace/xcuserdata/manraajnijjar.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ValidationsDemo.xcodeproj/xcuserdata/manraajnijjar.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.DS_Store b/.DS_Store index f47eb24dfa7d4e36d280409af9227487aed6d666..651d46e5e1f14c8997c7ec261d0aa6f892905ba3 100644 GIT binary patch delta 264 zcmZoMXfc=|#>B)qu~2NHo+2aL!~pA!7aACWj2 zF;p-lGvqU*Fr+dRFcbkm F1po%PKR5sY delta 76 zcmZoMXfc=|#>CJzu~2NHo+2aT!~knX#>qTPN|Pg*_&2vOH?wS>zCG`BOPB!+b`w4T diff --git a/ValidationsDemo.xcodeproj/project.xcworkspace/xcuserdata/manraajnijjar.xcuserdatad/UserInterfaceState.xcuserstate b/ValidationsDemo.xcodeproj/project.xcworkspace/xcuserdata/manraajnijjar.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..ea0971179f857af1d63f1214d80713f8d03e31bf GIT binary patch literal 18716 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 Vn+vxKE*M1#f7x~YJ+s2c{~r}yuU7y7 literal 0 HcmV?d00001 diff --git a/ValidationsDemo.xcodeproj/xcuserdata/manraajnijjar.xcuserdatad/xcschemes/xcschememanagement.plist b/ValidationsDemo.xcodeproj/xcuserdata/manraajnijjar.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..58a7c63 --- /dev/null +++ b/ValidationsDemo.xcodeproj/xcuserdata/manraajnijjar.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + ValidationsDemo.xcscheme + + orderHint + 0 + + + + diff --git a/ValidationsDemo/Base.lproj/Main.storyboard b/ValidationsDemo/Base.lproj/Main.storyboard index 568378d..ab693f5 100644 --- a/ValidationsDemo/Base.lproj/Main.storyboard +++ b/ValidationsDemo/Base.lproj/Main.storyboard @@ -1,11 +1,12 @@ - + - + + @@ -85,7 +86,7 @@ + + + + + + + + + + - @@ -112,14 +122,17 @@ + + + @@ -131,6 +144,7 @@ + diff --git a/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift b/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift index b8da3aa..06491da 100644 --- a/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift +++ b/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift @@ -72,6 +72,8 @@ internal extension UITextField { case let .range(min, max, message): try rangeValidation(min: min, max: max, message: message) + case let .filterWords(message): + try wordFilteredValidation(message: message) } } } @@ -166,6 +168,13 @@ internal extension UITextField { } } + private func wordFilteredValidation(message: String) throws { + print(text) + if let string = text, !string.isEmpty { + print(string) + } + } + // Generate error from validations private func generateException(_ message: String) -> Error { return NSError(domain: ValidationPreferences.domain, code: ValidationPreferences.errorCode, userInfo: [NSLocalizedDescriptionKey: message, "textField":self]) as Error diff --git a/ValidationsDemo/TextFieldValidation/ValidationPreferences.swift b/ValidationsDemo/TextFieldValidation/ValidationPreferences.swift index aa8df24..55c347b 100644 --- a/ValidationsDemo/TextFieldValidation/ValidationPreferences.swift +++ b/ValidationsDemo/TextFieldValidation/ValidationPreferences.swift @@ -17,6 +17,7 @@ enum Validation { case characterRange(min:Int, max:Int, message: String) case alphaNumeric(message: String) // Only allowed A-Z lower or upper case or blank space or numeric values. case range(min:Int, max:Int, message: String) // Range only apply on numeric values + case filterWords(message: String) } struct ValidationPreferences { diff --git a/ValidationsDemo/ViewController.swift b/ValidationsDemo/ViewController.swift index 1b99d3b..3833a86 100644 --- a/ValidationsDemo/ViewController.swift +++ b/ValidationsDemo/ViewController.swift @@ -17,7 +17,8 @@ class ViewController: UIViewController { @IBOutlet weak var passwordTextField: UITextField! @IBOutlet weak var ageTextField: UITextField! @IBOutlet weak var alphaNumericTextField: UITextField! - + @IBOutlet weak var wordFilterTextField: UITextField! + override func viewDidLoad() { super.viewDidLoad() @@ -49,6 +50,8 @@ extension ViewController { requiredTextField.validations = [Validation.required(message: "Text field is required")] ageTextField.validations = [Validation.range(min: 18, max: 70, message: "Invalid age value")] alphaNumericTextField.validations = [Validation.alphaNumeric(message: "Invalid alphanumeric textfield value")] + + wordFilterTextField.validations = [Validation.filterWords(message: "Sorry these words are not allowed")] } fileprivate func checkValidation() -> Bool{ From 3b56c3168da43f1e577b5552193cc8e31ed6b20c Mon Sep 17 00:00:00 2001 From: Manraaj Nijjar Date: Tue, 3 Oct 2017 10:48:43 -0400 Subject: [PATCH 2/5] Added a simple method for filtering words --- .DS_Store | Bin 6148 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 18716 -> 19144 bytes .../TextFieldValidation.swift | 10 +++++++--- ValidationsDemo/ViewController.swift | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.DS_Store b/.DS_Store index 651d46e5e1f14c8997c7ec261d0aa6f892905ba3..e2382964784282ead5e6ced71bd9efe65622ff3a 100644 GIT binary patch delta 19 bcmZoMXffEZl8Nb-$>fhr7MmY4DT)FBO`->2 delta 19 bcmZoMXffEZl8Na?-{g->7MmY4DT)FBQ4j~X diff --git a/ValidationsDemo.xcodeproj/project.xcworkspace/xcuserdata/manraajnijjar.xcuserdatad/UserInterfaceState.xcuserstate b/ValidationsDemo.xcodeproj/project.xcworkspace/xcuserdata/manraajnijjar.xcuserdatad/UserInterfaceState.xcuserstate index ea0971179f857af1d63f1214d80713f8d03e31bf..d6b5dfaeb6b24823c0439695999e6c8be36ca263 100644 GIT binary patch delta 9450 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 diff --git a/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift b/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift index 06491da..043269a 100644 --- a/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift +++ b/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift @@ -10,6 +10,7 @@ import Foundation import UIKit private var validationKey: UInt8 = 0 +private var wordsForFilter = [String]() internal extension UITextField { @@ -168,10 +169,13 @@ internal extension UITextField { } } + //** private func wordFilteredValidation(message: String) throws { - print(text) - if let string = text, !string.isEmpty { - print(string) + let wordsInText = text?.split(separator:" "); + for word in wordsInText! { + if wordsForFilter.contains(String(word)){ + throw generateException(message); + } } } diff --git a/ValidationsDemo/ViewController.swift b/ValidationsDemo/ViewController.swift index 3833a86..3bbef31 100644 --- a/ValidationsDemo/ViewController.swift +++ b/ValidationsDemo/ViewController.swift @@ -50,7 +50,6 @@ extension ViewController { requiredTextField.validations = [Validation.required(message: "Text field is required")] ageTextField.validations = [Validation.range(min: 18, max: 70, message: "Invalid age value")] alphaNumericTextField.validations = [Validation.alphaNumeric(message: "Invalid alphanumeric textfield value")] - wordFilterTextField.validations = [Validation.filterWords(message: "Sorry these words are not allowed")] } @@ -63,6 +62,7 @@ extension ViewController { try requiredTextField.validate() try ageTextField.validate() try alphaNumericTextField.validate() + try wordFilterTextField.validate() return true } catch{ From d99f3fd602f59c3e306c0c8538d3530d7d2ed5e7 Mon Sep 17 00:00:00 2001 From: Manraaj Nijjar Date: Tue, 3 Oct 2017 11:19:08 -0400 Subject: [PATCH 3/5] Cleaned some comments and fixed a misaligned UIElement --- .DS_Store | Bin 6148 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 19144 -> 21192 bytes ValidationsDemo/Base.lproj/Main.storyboard | 23 +++++++++--------- .../TextFieldValidation.swift | 1 - 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/.DS_Store b/.DS_Store index e2382964784282ead5e6ced71bd9efe65622ff3a..8e4aa0156206d12d4d3d962c48ec39b40f2025ca 100644 GIT binary patch delta 32 ocmZoMXffEZl8Nb&$>fhr7Ly+{&Di`^gr9k1LoMTGc8 delta 33 pcmZoMXffEZl8Nb-$>fhr7Ly+{&0sXx+{oOYmGdss$egNI<40r$l diff --git a/ValidationsDemo.xcodeproj/project.xcworkspace/xcuserdata/manraajnijjar.xcuserdatad/UserInterfaceState.xcuserstate b/ValidationsDemo.xcodeproj/project.xcworkspace/xcuserdata/manraajnijjar.xcuserdatad/UserInterfaceState.xcuserstate index d6b5dfaeb6b24823c0439695999e6c8be36ca263..581e51ee6b857963c1ef48ecb405e16ae6b5921a 100644 GIT binary patch delta 7982 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 c#>c*mU60+0-F - @@ -85,6 +84,15 @@ + + + + + + + + + - - - - - - - - - @@ -120,15 +119,15 @@ + - - + diff --git a/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift b/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift index 043269a..e832941 100644 --- a/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift +++ b/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift @@ -169,7 +169,6 @@ internal extension UITextField { } } - //** private func wordFilteredValidation(message: String) throws { let wordsInText = text?.split(separator:" "); for word in wordsInText! { From f94632a47e6a798823d8161129561d73f40b0552 Mon Sep 17 00:00:00 2001 From: Manraaj Nijjar Date: Tue, 3 Oct 2017 13:19:47 -0400 Subject: [PATCH 4/5] Added a more scrutinous filter method that utilizes Rabin-Karp --- .DS_Store | Bin 6148 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 21192 -> 21090 bytes .../TextFieldValidation.swift | 29 +++++++++++++++++- .../ValidationPreferences.swift | 3 +- ValidationsDemo/ViewController.swift | 5 +-- 5 files changed, 33 insertions(+), 4 deletions(-) diff --git a/.DS_Store b/.DS_Store index 8e4aa0156206d12d4d3d962c48ec39b40f2025ca..f0ec167e5efb34197de4e33e524b7cbb29db5bcc 100644 GIT binary patch delta 19 bcmZoMXffEZl8Nczxyc`yEH*!8QWOOMQ}YM` delta 19 bcmZoMXffEZl8Nb&$>fhr7MmY4DT)FBP5K9D diff --git a/ValidationsDemo.xcodeproj/project.xcworkspace/xcuserdata/manraajnijjar.xcuserdatad/UserInterfaceState.xcuserstate b/ValidationsDemo.xcodeproj/project.xcworkspace/xcuserdata/manraajnijjar.xcuserdatad/UserInterfaceState.xcuserstate index 581e51ee6b857963c1ef48ecb405e16ae6b5921a..4ca6ffc04356586f36a7d3f41215c9177e00e988 100644 GIT binary patch delta 4830 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 n2lO;CExX5>XPqQ delta 4969 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 fsoK7k`pM;R}Q&zrg>DsoDPv3N-0D diff --git a/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift b/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift index e832941..06a1582 100644 --- a/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift +++ b/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift @@ -73,9 +73,13 @@ internal extension UITextField { case let .range(min, max, message): try rangeValidation(min: min, max: max, message: message) - case let .filterWords(message): + case let .filterMessageBase(message): try wordFilteredValidation(message: message) + + case let .filterMessageExhaustive(message): + try wordFullFilterValidation(message: message) } + } } catch { @@ -178,6 +182,29 @@ internal extension UITextField { } } + private func wordFullFilterValidation(message: String) throws { + let regexPatternForSpecialChars = "\\W+" + let regexFilter = try! NSRegularExpression(pattern: regexPatternForSpecialChars, options: NSRegularExpression.Options.caseInsensitive) + let textRange = NSMakeRange(0, (text?.characters.count)!) + var textForFilter = regexFilter.stringByReplacingMatches(in: text!, options: [], range: textRange, withTemplate: "") + textForFilter = textForFilter.lowercased() + + var wordsForFilterDictionary = [String : Bool]() + for word in wordsForFilter { + wordsForFilterDictionary[String(word)] = true + } + for firstCharIndex in 0 ... textForFilter.characters.count { + for endCharIndex in firstCharIndex ... textForFilter.characters.count { + let startIndexForSubstring = textForFilter.index(textForFilter.startIndex, offsetBy: firstCharIndex) + let endIndexForSubstring = textForFilter.index(textForFilter.startIndex, offsetBy: endCharIndex) + let rangeForSubstring = startIndexForSubstring.. Error { return NSError(domain: ValidationPreferences.domain, code: ValidationPreferences.errorCode, userInfo: [NSLocalizedDescriptionKey: message, "textField":self]) as Error diff --git a/ValidationsDemo/TextFieldValidation/ValidationPreferences.swift b/ValidationsDemo/TextFieldValidation/ValidationPreferences.swift index 55c347b..a4f7b31 100644 --- a/ValidationsDemo/TextFieldValidation/ValidationPreferences.swift +++ b/ValidationsDemo/TextFieldValidation/ValidationPreferences.swift @@ -17,7 +17,8 @@ enum Validation { case characterRange(min:Int, max:Int, message: String) case alphaNumeric(message: String) // Only allowed A-Z lower or upper case or blank space or numeric values. case range(min:Int, max:Int, message: String) // Range only apply on numeric values - case filterWords(message: String) + case filterMessageBase(message: String) + case filterMessageExhaustive(message: String) } struct ValidationPreferences { diff --git a/ValidationsDemo/ViewController.swift b/ValidationsDemo/ViewController.swift index 3bbef31..9b09023 100644 --- a/ValidationsDemo/ViewController.swift +++ b/ValidationsDemo/ViewController.swift @@ -50,7 +50,8 @@ extension ViewController { requiredTextField.validations = [Validation.required(message: "Text field is required")] ageTextField.validations = [Validation.range(min: 18, max: 70, message: "Invalid age value")] alphaNumericTextField.validations = [Validation.alphaNumeric(message: "Invalid alphanumeric textfield value")] - wordFilterTextField.validations = [Validation.filterWords(message: "Sorry these words are not allowed")] + //wordFilterTextField.validations = [Validation.filterMessageBase(message: "Sorry these words are not allowed")] + wordFilterTextField.validations = [Validation.filterMessageExhaustive(message: "Sorry these words are not allowed")] } fileprivate func checkValidation() -> Bool{ @@ -59,7 +60,7 @@ extension ViewController { try emailTextField.validate() try mobileTextField.validate() try passwordTextField.validate() - try requiredTextField.validate() + //try requiredTextField.validate() try ageTextField.validate() try alphaNumericTextField.validate() try wordFilterTextField.validate() From a9951f1053ff121f6aad14ab78ca580e6981130e Mon Sep 17 00:00:00 2001 From: Manraaj Nijjar Date: Tue, 3 Oct 2017 13:49:22 -0400 Subject: [PATCH 5/5] Added a TextField for the Exhuastive search and moved the word filter list to the ValidationPreferences --- .DS_Store | Bin 6148 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 21090 -> 21176 bytes ValidationsDemo/Base.lproj/Main.storyboard | 17 +++++++++++++++-- .../TextFieldValidation.swift | 6 ++---- .../ValidationPreferences.swift | 1 + ValidationsDemo/ViewController.swift | 8 +++++--- 6 files changed, 23 insertions(+), 9 deletions(-) diff --git a/.DS_Store b/.DS_Store index f0ec167e5efb34197de4e33e524b7cbb29db5bcc..401679addafcf183deacbac5214f0bf09cdbd878 100644 GIT binary patch delta 19 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 delta 9210 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 + + + + + + + + + + @@ -117,12 +127,15 @@ + + + @@ -131,7 +144,6 @@ - @@ -144,6 +156,7 @@ + diff --git a/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift b/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift index 06a1582..ebfa84c 100644 --- a/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift +++ b/ValidationsDemo/TextFieldValidation/TextFieldValidation.swift @@ -10,7 +10,6 @@ import Foundation import UIKit private var validationKey: UInt8 = 0 -private var wordsForFilter = [String]() internal extension UITextField { @@ -176,7 +175,7 @@ internal extension UITextField { private func wordFilteredValidation(message: String) throws { let wordsInText = text?.split(separator:" "); for word in wordsInText! { - if wordsForFilter.contains(String(word)){ + if ValidationPreferences.wordsForFilter.contains(String(word)){ throw generateException(message); } } @@ -188,9 +187,8 @@ internal extension UITextField { let textRange = NSMakeRange(0, (text?.characters.count)!) var textForFilter = regexFilter.stringByReplacingMatches(in: text!, options: [], range: textRange, withTemplate: "") textForFilter = textForFilter.lowercased() - var wordsForFilterDictionary = [String : Bool]() - for word in wordsForFilter { + for word in ValidationPreferences.wordsForFilter { wordsForFilterDictionary[String(word)] = true } for firstCharIndex in 0 ... textForFilter.characters.count { diff --git a/ValidationsDemo/TextFieldValidation/ValidationPreferences.swift b/ValidationsDemo/TextFieldValidation/ValidationPreferences.swift index a4f7b31..ef8c940 100644 --- a/ValidationsDemo/TextFieldValidation/ValidationPreferences.swift +++ b/ValidationsDemo/TextFieldValidation/ValidationPreferences.swift @@ -29,4 +29,5 @@ struct ValidationPreferences { static let passwordRegEx = "(.{6,12})" static let domain = "VALIDATIONFAILED" static let errorCode = 501 + static let wordsForFilter = [String]() } diff --git a/ValidationsDemo/ViewController.swift b/ValidationsDemo/ViewController.swift index 9b09023..87d67a0 100644 --- a/ValidationsDemo/ViewController.swift +++ b/ValidationsDemo/ViewController.swift @@ -18,6 +18,7 @@ class ViewController: UIViewController { @IBOutlet weak var ageTextField: UITextField! @IBOutlet weak var alphaNumericTextField: UITextField! @IBOutlet weak var wordFilterTextField: UITextField! + @IBOutlet weak var wordFilterThoroughTextField: UITextField! override func viewDidLoad() { super.viewDidLoad() @@ -50,8 +51,8 @@ extension ViewController { requiredTextField.validations = [Validation.required(message: "Text field is required")] ageTextField.validations = [Validation.range(min: 18, max: 70, message: "Invalid age value")] alphaNumericTextField.validations = [Validation.alphaNumeric(message: "Invalid alphanumeric textfield value")] - //wordFilterTextField.validations = [Validation.filterMessageBase(message: "Sorry these words are not allowed")] - wordFilterTextField.validations = [Validation.filterMessageExhaustive(message: "Sorry these words are not allowed")] + wordFilterTextField.validations = [Validation.filterMessageBase(message: "Sorry these words are not allowed")] + wordFilterThoroughTextField.validations = [Validation.filterMessageExhaustive(message: "Sorry these words are not allowed")] } fileprivate func checkValidation() -> Bool{ @@ -60,10 +61,11 @@ extension ViewController { try emailTextField.validate() try mobileTextField.validate() try passwordTextField.validate() - //try requiredTextField.validate() + try requiredTextField.validate() try ageTextField.validate() try alphaNumericTextField.validate() try wordFilterTextField.validate() + try wordFilterThoroughTextField.validate() return true } catch{