¿Cómo validar una dirección IP en Objective-C?¿Cómo validar una dirección IP con expresión regular en Objective-C?
Respuesta
Aquí hay un enfoque alternativo que también podría ayudar. Supongamos que usted tiene una NSString*
que contiene su dirección IP, llamada ipAddressStr
, del formato a.b.c.d:
int ipQuads[4];
const char *ipAddress = [ipAddressStr cStringUsingEncoding:NSUTF8StringEncoding];
sscanf(ipAddress, "%d.%d.%d.%d", &ipQuads[0], &ipQuads[1], &ipQuads[2], &ipQuads[3]);
@try {
for (int quad = 0; quad < 4; quad++) {
if ((ipQuads[quad] < 0) || (ipQuads[quad] > 255)) {
NSException *ipException = [NSException
exceptionWithName:@"IPNotFormattedCorrectly"
reason:@"IP range is invalid"
userInfo:nil];
@throw ipException;
}
}
}
@catch (NSException *exc) {
NSLog(@"ERROR: %@", [exc reason]);
}
podrá modificar el bloque condicional if
seguir RFC 1918 directrices, si necesita ese nivel de validación.
Alex, ¿quisiste poner un '&' antes de cada argumento de ipQuad en sscanf? –
Tenía la intención, pero no lo hice. Editaré la respuesta después de agregar este comentario. Además, cambié el tipo de 'ipQuads' de' unsigned char' a 'unsigned int', de modo que la prueba puede fallar. –
Desde iOS 4 RegExps están disponibles en iOS SDK: http://developer.apple.com/library/IOs/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html ... así que, tal vez, si desea marcar esta respuesta como obsoleta "pero útil para fines informativos o educativos" ayudará :) –
Un truco que puede hacer es probar el retorno de la llamada BSD inet_aton así:
#include <arpa/inet.h>
- (BOOL)isIp:(NSString*)string{
struct in_addr pin;
int success = inet_aton([string UTF8String],&pin);
if (success == 1) return TRUE;
return FALSE;
}
Sé sin embargo consciente de que este valida la cadena si ésta contiene una dirección IP en cualquier formato, no se limita al formato punteado.
FYI: 'inet_aton' ha quedado en desuso en favor de' inet_pton', que maneja IPv6. – mattt
Por favor, si está devolviendo un valor booleano de un cheque if, simplemente devuelva el cheque if, es decir 'return success == 1' –
Aquí hay una categoría que utiliza el moderno inet_pton que devolverá SÍ para una cadena IPv4 o IPv6 válida.
#include <arpa/inet.h>
@implementation NSString (IPValidation)
- (BOOL)isValidIPAddress
{
const char *utf8 = [self UTF8String];
int success;
struct in_addr dst;
success = inet_pton(AF_INET, utf8, &dst);
if (success != 1) {
struct in6_addr dst6;
success = inet_pton(AF_INET6, utf8, &dst6);
}
return success == 1;
}
@end
Para referencia futura, ¿el éxito == 1? VERDADERO: FALSO no es necesario. Un simple éxito == 1 funcionaría. – varikin
edición Swift:
func isIPAddressValid(ip: String) -> Bool {
guard let utf8Str = (ip as NSString).utf8String else {
return false
}
let utf8:UnsafePointer<Int8> = UnsafePointer(utf8Str)
var success: Int32
var dst: in_addr = in_addr()
success = inet_pton(AF_INET, utf8, &dst)
if (success != 1) {
var dst6: in6_addr? = in6_addr()
success = inet_pton(AF_INET6, utf8, &dst6);
}
return success == 1
}
- 1. Cómo validar una expresión regular con PHP
- 2. ¿Cómo validar una expresión regular?
- 3. Cómo validar una dirección IP en C#
- 4. Validar una dirección IP (con máscara)
- 5. Expresión regular para que coincida con la dirección IP + comodín
- 6. usando la expresión regular para validar la dirección IP en Powershell?
- 7. IP privada identificador de dirección en la expresión regular
- 8. C# Expresión regular para validar una fecha?
- 9. ¿Es seguro validar una URL con una expresión regular?
- 10. php - cómo validar una expresión regular en sí?
- 11. Validar el correo electrónico con expresión regular VB.Net
- 12. Rubí Expresión regular para que coincida con una dirección URL
- 13. expresión regular para validar cadena hexadecimal
- 14. Validar IP en android
- 15. Expresión regular para validar la hora válida
- 16. El uso de una expresión regular para que coincida con las direcciones IP en Python
- 17. ¿Expresión regular para encontrar una expresión regular?
- 18. Comprobación de una cadena completa con una expresión regular
- 19. ¿Altere la expresión regular para permitir la dirección IP al verificar la URL?
- 20. Geocodificar una dirección IP?
- 21. Coincidencia con una expresión regular en Scala
- 22. ¿Hay una expresión regular para detectar una expresión regular válida?
- 23. Validar una expresión booleana con corchetes en C#
- 24. ¿Cómo puedo generar texto que coincida con una expresión regular de una expresión regular?
- 25. ¿Cómo descompilar una expresión regular?
- 26. Verificación de la corrección de una dirección de correo electrónico con una expresión regular en Bash
- 27. expresión regular con -, ::, (y)
- 28. Necesita expresión regular para validar nombre de usuario
- 29. expresión regular para validar un número de Google Analytics UA
- 30. ¿Cómo configuro la dirección IP con CherryPy?
no entiendo por ella. ¿Por qué tiene que ser expresiones regulares? – soulmerge
Es posible que esté mejor con NSScanner, dado que no hay una biblioteca de expresiones regulares incorporada. –
¿Cómo puedo hacer esto con NSSCanner? – diana