added new validator
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
699626a4b8
commit
10f4f1db11
@ -10,6 +10,35 @@ import UIKit
|
|||||||
|
|
||||||
extension InputField {
|
extension InputField {
|
||||||
|
|
||||||
|
public class TelephoneNumberValidator: Rule, Withable {
|
||||||
|
public var format: String
|
||||||
|
public var errorMessage: String = "Please enter a valid telephone number"
|
||||||
|
|
||||||
|
public init(format: String) {
|
||||||
|
self.format = format
|
||||||
|
}
|
||||||
|
|
||||||
|
public func isValid(value: String?) -> Bool {
|
||||||
|
guard let value, !value.isEmpty else { return true }
|
||||||
|
let regex = createRegex(from: format)
|
||||||
|
let predicate = NSPredicate(format: "SELF MATCHES %@", regex)
|
||||||
|
let valid = predicate.evaluate(with: value)
|
||||||
|
return valid
|
||||||
|
}
|
||||||
|
|
||||||
|
private func createRegex(from format: String) -> String {
|
||||||
|
// Escape special regex characters in the format string
|
||||||
|
let escapedFormat = NSRegularExpression.escapedPattern(for: format)
|
||||||
|
|
||||||
|
// Replace placeholder characters with regex patterns
|
||||||
|
let regex = escapedFormat
|
||||||
|
.replacingOccurrences(of: "X", with: "\\d")
|
||||||
|
|
||||||
|
return "^" + regex + "$"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class TelephoneHandler: FieldTypeHandler {
|
class TelephoneHandler: FieldTypeHandler {
|
||||||
static let shared = TelephoneHandler()
|
static let shared = TelephoneHandler()
|
||||||
|
|
||||||
@ -25,14 +54,7 @@ extension InputField {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override func appendRules(_ inputField: InputField) {
|
override func appendRules(_ inputField: InputField) {
|
||||||
if let text = inputField.textField.text, text.count > 0 {
|
inputField.rules.append(.init(TelephoneNumberValidator(format: "XXX-XXX-XXXX")))
|
||||||
let rule = CharacterCountRule().copyWith {
|
|
||||||
$0.maxLength = "XXX-XXX-XXXX".count
|
|
||||||
$0.compareType = .equals
|
|
||||||
$0.errorMessage = "Enter a valid telephone."
|
|
||||||
}
|
|
||||||
inputField.rules.append(.init(rule))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override func textField(_ inputField: InputField, textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
override func textField(_ inputField: InputField, textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
||||||
@ -62,6 +84,8 @@ extension InputField {
|
|||||||
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
|
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
value = formattedNumber
|
||||||
|
|
||||||
// Prevent the default behavior
|
// Prevent the default behavior
|
||||||
return false
|
return false
|
||||||
|
|
||||||
@ -71,6 +95,7 @@ extension InputField {
|
|||||||
if let text = inputField.text {
|
if let text = inputField.text {
|
||||||
let rawNumber = text.filter { $0.isNumber }
|
let rawNumber = text.filter { $0.isNumber }
|
||||||
textField.text = formatUSNumber(rawNumber)
|
textField.text = formatUSNumber(rawNumber)
|
||||||
|
value = textField.text
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user