Skip to content

Commit 724a05c

Browse files
committed
Merge pull request #32 from leodasvacas/regex-messages
Custom messages for regex rules
2 parents 5a3ddcb + ab2bb98 commit 724a05c

File tree

6 files changed

+28
-62
lines changed

6 files changed

+28
-62
lines changed

.DS_Store

6 KB
Binary file not shown.

README.md

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ override func viewDidLoad() {
5353
validator.registerField(fullNameTextField, rules: [RequiredRule(), FullNameRule()])
5454

5555
// You can pass in error labels with your rules
56-
validator.registerField(emailTextField, errorLabel: emailErrorLabel, rules: [RequiredRule(), EmailRule()])
56+
// You can pass in custom error messages to regex rules (such as ZipCodeRule and EmailRule)
57+
validator.registerField(emailTextField, errorLabel: emailErrorLabel, rules: [RequiredRule(), EmailRule(message: "Invalid email")])
5758

5859
// You can validate against other fields using ConfirmRule
5960
validator.registerField(emailConfirmTextField, errorLabel: emailConfirmErrorLabel, rules: [ConfirmationRule(confirmField: emailTextField)])
@@ -101,31 +102,16 @@ func validationFailed(errors:[UITextField:ValidationError]) {
101102

102103
We will create a ```SSNRule``` class to show how to create your own Validation. A United States Social Security Number (or SSN) is a field that consists of XXX-XX-XXXX.
103104

104-
Create a class that implements the Rule protocol
105+
Create a class that inherits from RegexRule
105106

106107
```swift
107108

108-
class SSNVRule: Rule {
109-
let REGEX = "^\\d{3}-\\d{2}-\\d{4}$"
110-
111-
init(){}
112-
113-
// allow for custom variables to be passed
114-
init(regex:String){
115-
self.REGEX = regex
116-
}
117-
118-
func validate(value: String) -> Bool {
119-
if let ssnTest = NSPredicate(format: "SELF MATCHES %@", REGEX) {
120-
if ssnTest.evaluateWithObject(value) {
121-
return true
122-
}
123-
return false
124-
}
125-
}
126-
127-
func errorMessage() -> String{
128-
return "Not a valid SSN"
109+
class SSNVRule: RegexRule {
110+
111+
static let regex = "^\\d{3}-\\d{2}-\\d{4}$"
112+
113+
convenience init(message : String = "Not a valid SSN"){
114+
self.init(regex: SSNVRule.regex, message : message)
129115
}
130116
}
131117
```

Validator/EmailRule.swift

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,10 @@
99
import Foundation
1010

1111
public class EmailRule: RegexRule {
12-
13-
public init(){
14-
super.init(regex: "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}")
15-
}
16-
17-
override public init(regex:String){
18-
super.init(regex: regex)
19-
}
20-
21-
override public func errorMessage() -> String {
22-
return "Must be a valid email address"
23-
}
12+
13+
static let regex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
14+
15+
public convenience init(message : String = "Must be a valid email address"){
16+
self.init(regex: EmailRule.regex, message: message)
17+
}
2418
}

Validator/PasswordRule.swift

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,14 @@ public class PasswordRule : RegexRule {
1313
// Alternative Regexes
1414

1515
// 8 characters. One uppercase. One Lowercase. One number.
16-
// var PASSWORD_REGEX = "^(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[a-z]).{8,}$"
16+
// static let regex = "^(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[a-z]).{8,}$"
1717
//
1818
// no length. One uppercase. One lowercae. One number.
19-
// var PASSWORD_REGEX = "^(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[a-z]).*?$"
19+
// static let regex = "^(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[a-z]).*?$"
20+
21+
static let regex = "^(?=.*?[A-Z]).{8,}$"
2022

21-
public init(){
22-
super.init(regex: "^(?=.*?[A-Z]).{8,}$")
23+
public convenience init(message : String = "Must be 8 characters with 1 uppercase") {
24+
self.init(regex: PasswordRule.regex, message : message)
2325
}
24-
25-
override public init(regex: String) {
26-
super.init(regex: regex)
27-
}
28-
29-
override public func errorMessage() -> String {
30-
return "Must be 8 characters with 1 uppercase"
31-
}
32-
3326
}

Validator/RegexRule.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ import Foundation
1111
public class RegexRule : Rule {
1212

1313
private var REGEX: String = "^(?=.*?[A-Z]).{8,}$"
14-
15-
public init(regex: String){
14+
private var message : String
15+
16+
public init(regex: String, message: String = "Invalid Regular Expression"){
1617
self.REGEX = regex
18+
self.message = message
1719
}
1820

1921
public func validate(value: String) -> Bool {
@@ -22,6 +24,6 @@ public class RegexRule : Rule {
2224
}
2325

2426
public func errorMessage() -> String {
25-
return "Invalid Regular Expression"
27+
return message
2628
}
2729
}

Validator/ZipCodeRule.swift

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,7 @@ import Foundation
1010

1111
public class ZipCodeRule: RegexRule {
1212

13-
public init(){
14-
super.init(regex: "\\d{5}")
13+
public convenience init(message : String = "Enter a valid 5 digit zipcode"){
14+
self.init(regex: "\\d{5}", message : message)
1515
}
16-
17-
override public init(regex: String) {
18-
super.init(regex: regex)
19-
}
20-
21-
public override func errorMessage() -> String {
22-
return "Enter a valid 5 digit zipcode"
23-
}
24-
2516
}

0 commit comments

Comments
 (0)