Getting invalid phone number as valid
sharukmsd opened this issue · comments
New Issue Checklist
- Updated PhoneNumberKit to the latest version / Specified the podspec directly from the repo
- Phone number formatted correctly on JavaScript version
- I searched for existing GitHub issues
Steps to reproduce
phoneNumberKit.isValidPhoneNumber("5555555555", withRegion: "PK")
is returning true
Expected result
It should return false because the correct Pakistan numbers format is +923*******
Actual result
It validates an invalid number "5555555555" by returning true
FYI: Pakistan number shouldn't start with some invalid e.g +92876543845 or +925555555555.
Environment
I'm using Cocoapods to integrate PhoneNumberKit
I didn’t the issue.
valid numbers for pakistan start with 3******* or +923*******, not with 5*******
I didn’t the issue.
Got it. Well, PNK relies on the metadata provided by libPhoneNumber from Google, and the number provided is considered valid on that lib.
You might need to report this issue there.
Following code resolves the issue, thanks for the help @bguidolim
func validateNumberLengthAndFormat(_ number: String) -> Bool {
let nonFormattedNumber = number.replacingOccurrences(of: " ", with: "")
if nonFormattedNumber.count >= validNumberLength {
let numberToFormat = String(nonFormattedNumber.prefix(validNumberLength))
let formattedNumber = phoneNumberValidaor.formatNumber(numberToFormat, forRegion: selectedCounrty.regionId)
if formattedNumber != phoneNumberInput {
phoneNumberInput = formattedNumber
return phoneNumberValidaor.isValidPhoneNumber(phoneNumberInput, forRegion: selectedCounrty.regionId)
}
}
return false
}
and here's PhoneNumberValidator
class PhoneNumberValidator {
let phoneNumberKit = PhoneNumberKit()
func isValidPhoneNumber(_ number: String, forRegion regionId: String) -> Bool {
return phoneNumberKit.isValidPhoneNumber(number, withRegion: regionId)
}
func formatNumber(_ number: String, forRegion regionId: String) -> String {
let phoneNumber = try? phoneNumberKit.parse(number, withRegion: regionId)
guard let phoneNumber = phoneNumber else {
return number
}
let formattedNumber = phoneNumberKit.format(
phoneNumber, toType: .national, withPrefix: false)
.replacingOccurrences(of: "^0+", with: "", options: .regularExpression
)
return formattedNumber
}
}