Come convalidare un indirizzo IP in Objective-C?Come convalidare un indirizzo IP con espressioni regolari in Objective-C?
risposta
Ecco un approccio alternativo che potrebbe anche essere d'aiuto. Supponiamo di avere un NSString*
che contiene il vostro indirizzo IP, chiamato 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]);
}
è possibile modificare il blocco condizionale if
a seguire RFC 1918 linee guida, se avete bisogno di quel livello di convalida.
Alex, intendevi mettere un '&' prima di ogni argomento ipQuad su sscanf? –
Volevo, ma non l'ho fatto. Modificherò la risposta dopo aver aggiunto questo commento. Inoltre, ho cambiato il tipo di 'ipQuads' da' unsigned char' a 'unsigned int', in modo che il test abbia una possibilità di fallire. –
Poiché i regExps di iOS 4 sono disponibili nell'SDK di iOS: http://developer.apple.com/library/IOs/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html ... quindi, forse se si desidera contrassegnare questa risposta come deprecata "ma utile per scopi informativi o educativi" aiuterà :) –
Un trucco che puoi fare è testare il ritorno della chiamata BSD inet_aton come questo:
#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;
}
Essere consapevoli, tuttavia, che questa convalida la stringa se contiene un indirizzo IP in qualsiasi formato, non è limitato al formato punteggiato.
FYI: 'inet_aton' è stato deprecato a favore di' inet_pton', che gestisce IPv6. – mattt
Per favore, se stai restituendo un booleano da un controllo if se è sufficiente restituire il controllo if stesso i.e. return success == 1' –
Ecco una categoria che utilizza il moderno inet_pton che restituirà SÌ per una stringa valida IPv4 o IPv6.
#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
Per il riferimento futuro, il successo == 1? VERO: FALSE non è necessario. Un semplice successo == 1 funzionerebbe. – varikin
Swift edizione:
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. come posso convalidare un URL in JavaScript utilizzando espressioni regolari
- 2. espressioni regolari per convalidare un timestamp
- 3. Come convalidare un indirizzo URL in jquery usando Regex?
- 4. Come creare un loop con espressioni regolari?
- 5. Puzzle con espressioni regolari
- 6. Come ottenere il proprio indirizzo IP con un indirizzo socket?
- 7. Utilizzo di PHP espressioni regolari per convalidare il nome utente
- 8. indirizzo IP firmato cloudfront indirizzo IP
- 9. Geocode un indirizzo IP?
- 10. espressioni regolari per convalidare UK National Insurance Number
- 11. Casse in espressioni regolari
- 12. Espressioni regolari in OCaml
- 13. convalida Email uso delle espressioni regolari in JSF 2/primefaces
- 14. Espressioni regolari nel findstr
- 15. Convalida un indirizzo IP (con maschera)
- 16. Indirizzo IP in Silverlight
- 17. Espressioni regolari in C
- 18. Moltiplicazione con espressioni regolari .NET
- 19. Controllo di un intervallo numerico con espressioni regolari
- 20. espressioni regolari in PHP con preg_match_all
- 21. Come bloccare un indirizzo IP usando web.xml?
- 22. Combinare più espressioni regolari in un automa
- 23. Espressioni regolari (regex) in giapponese
- 24. prove sulle espressioni regolari
- 25. Parser indirizzo IP in Javascript
- 26. case-insensitive espressioni regolari
- 27. Come usare espressioni regolari in localizzatori selenio
- 28. Come utilizzare le espressioni regolari in Jinja2?
- 29. Come confrontare due espressioni regolari?
- 30. espressioni regolari javascript come funzioni?
io non lo capisco. Perché deve essere espressioni regolari? – soulmerge
Potrebbe stare meglio con NSScanner, dato che non esiste una libreria di espressioni regolari. –
Come posso farlo con NSSCanner? – diana