iphone - telefono - Validar número de teléfono ios
opcion ignorar contacto iphone (9)
En veloz 4 -
func ValidateMobileNumber(txtFeid : UITextField, strChk : String, range: NSRange) -> Bool {
if txtFeid.text!.count >= 10 {
return false
}
let formatePre = "^((//+)|(00))[0-9]{6,14}$"
let resultPredicate : NSPredicate = NSPredicate(format: "SELF MATCHES %@",formatePre)
return resultPredicate.evaluate(with: strChk)
}
Necesito validar un número de teléfono internacional.
Sé que es difícil validar un número de teléfono internacional, así que lo voy a mantener simple:
+
o 00, luego 6-14 números
Mi código actual usando una expresión regular no funciona por alguna razón que no puedo resolver. Simplemente dice que no puede abrir la expresión regular y se bloquea.
Aquí está mi código actual:
NSString *phoneRegex = @"^[/+(00)][0-9]{6,14}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
BOOL phoneValidates = [phoneTest evaluateWithObject:phoneNumber];
¿Dónde estoy equivocado?
¡Gracias!
La única buena manera de validar los números de teléfono es utilizar link . Hay un puerto iOS, o puede ejecutar la implementación de JavaScript en un UIWebView
oculto.
(Lo hice hace unos años, cuando todavía no era un puerto iOS. Funciona como un amuleto y es muy rápido incluso en iPhones antiguos).
Una forma fácil de validar el número de teléfono y el límite de contraseña, simplemente siga el proceso a continuación.
if ((self.mobileTxtFld.text.length < 10 )) {
[_mobileTxtFld becomeFirstResponder];
}
else if ((self.passwordTxtFld.text.length < kPasswordCharacterMinLimit) || (self.passwordTxtFld.text.length > kPasswordCharacterMaxLimit)) {
// show alert
}
después de eso puedes implementar el método delegado textfiled "shouldChangeCharactersInRange" en el que solo debes escribir este código
if (textField == _mobileTxtFld) {
if([string rangeOfCharacterFromSet:ALLOWED_NUMBERS].location == NSNotFound){
NSUInteger newLength = [textField.text length] + [string length] - range.length;
if(newLength > kMobileNumberLimit - 1){
if(textField.text.length != kMobileNumberLimit){
textField.text = [NSString stringWithFormat:@"%@%@",textField.text,string];
}
[textField resignFirstResponder];
return NO;
}
else{
return YES;
}
}
else{
return NO;
}
}
return YES;
aquí ALLOWED_NUMBERS y kMobileNumberLimit son
#define kMobileNumberLimit 10
#define ALLOWED_NUMBERS [[NSCharacterSet decimalDigitCharacterSet] invertedSet]
#define minLimit 6
#define maxLimit 17
bueno, depende de qué tan estricto quieras ser, no parece que esta expresión regular sea especialmente estricta. esta expresión regex dice:
comience al principio de la línea coincida con uno + (o tal vez 1 o 0) que parezca ambiguo (pero puede no depender de la implementación) porque la captura paréntesis :() rompe la relación de + y? posiblemente fuera de lugar: haga coincidir cualquier dígito 0-9 1 o 0 veces 6-14 veces luego un dígito 0-9 luego el final de la línea. también nota que cualquier barra inversa tendrá que duplicarse ... @ "/ b" para un límite de palabras. es posible que desee probar algo como ...
@"//b[//d]{3}//-[//d]{3}//-[//d]{4}//b"
would I think match your example, but it wouldn''t match
(555) 555 - 5555 or
555.555.5555 or
+44 1865 55555
txtlpmobile.text es la cadena (no va a entrar el móvil)
int length = [self getLength:txtLpMobile.text];
if(length == 10) {
if(range.length == 0)
return NO;
}
if(length == 3){
NSString *num = [self formatNumber:txtLpMobile.text];
txtLpMobile.text = [NSString stringWithFormat:@"(%@) ",num];
if(range.length > 0) {
txtLpMobile.text = [NSString stringWithFormat:@"%@",[num substringToIndex:3]];
}
} else if(length == 6) {
NSString *num = [self formatNumber:txtLpMobile.text];
txtLpMobile.text = [NSString stringWithFormat:@"(%@) %@-",[num substringToIndex:3],[num substringFromIndex:3]];
if(range.length > 0) {
txtLpMobile.text = [NSString stringWithFormat:@"(%@) %@",[num substringToIndex:3],[num substringFromIndex:3]];
}
}
NSUInteger newLength;
newLength = [txtLpMobile.text length] + [string length] - range.length;
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS_ONLY] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return (([string isEqualToString:filtered])&&(newLength <= CHARACTER_LIMIT));
para el número de formato
-(NSString*)formatNumber:(NSString*)mobileNumber
{
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"(" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@")" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@" " withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"-" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"+" withString:@""];
int length = [mobileNumber length];
if(length > 10)
{
mobileNumber = [mobileNumber substringFromIndex: length-10];
}
return mobileNumber;
}
para obtener longitud
-(int)getLength:(NSString*)mobileNumber
{
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"(" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@")" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@" " withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"-" withString:@""];
mobileNumber = [mobileNumber stringByReplacingOccurrencesOfString:@"+" withString:@""];
int length = [mobileNumber length];
return length;
}
NSString *phoneRegex = @"^((//+)|(00))[0-9]{6,14}|[0-9]{6,14}$";
Esto se prueba RegularExpression Esto se aceptará con el código de país O sin código de país
Copie y pegue el método para validar los números de teléfono:
- (BOOL)validatePhone:(NSString *)phoneNumber
{
NSString *phoneRegex = @"^((//+)|(00))[0-9]{6,14}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
return [phoneTest evaluateWithObject:phoneNumber];
}
o biblioteca de código abierto para validar números de teléfono
-(int)findLength:(NSString*)phoneNumber
{
phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"(" withString:@""];
phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@")" withString:@""];
phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@" " withString:@""];
phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"-" withString:@""];
phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"+" withString:@""];
int length = [phoneNumber length];
return length;
}
NSString *phoneRegex = @"^((//+)|(00))[0-9]{6,14}$";
De esta manera es un poco mejor. Tu código funcionará también si escapas de la "/".