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 {
|
||||
|
||||
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 {
|
||||
static let shared = TelephoneHandler()
|
||||
|
||||
@ -25,14 +54,7 @@ extension InputField {
|
||||
}
|
||||
|
||||
override func appendRules(_ inputField: InputField) {
|
||||
if let text = inputField.textField.text, text.count > 0 {
|
||||
let rule = CharacterCountRule().copyWith {
|
||||
$0.maxLength = "XXX-XXX-XXXX".count
|
||||
$0.compareType = .equals
|
||||
$0.errorMessage = "Enter a valid telephone."
|
||||
}
|
||||
inputField.rules.append(.init(rule))
|
||||
}
|
||||
inputField.rules.append(.init(TelephoneNumberValidator(format: "XXX-XXX-XXXX")))
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
value = formattedNumber
|
||||
|
||||
// Prevent the default behavior
|
||||
return false
|
||||
|
||||
@ -71,6 +95,7 @@ extension InputField {
|
||||
if let text = inputField.text {
|
||||
let rawNumber = text.filter { $0.isNumber }
|
||||
textField.text = formatUSNumber(rawNumber)
|
||||
value = textField.text
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user