Jak zweryfikować adres IP w Objective-C?Jak sprawdzić poprawność adresu IP za pomocą wyrażenia regularnego w Objective-C?
Odpowiedz
Oto alternatywne podejście, które może również pomóc. Załóżmy, że masz NSString*
który zawiera adres IP, o nazwie ipAddressStr
, w formacie 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]);
}
Można modyfikować warunkowego bloku if
podążać RFC 1918 wytyczne, jeśli trzeba, że poziom walidacji.
Alex, czy chciałeś wstawić "&" przed każdym argumentem ipQuad do sscanf? –
Chciałem, ale nie zrobiłem. Będę edytować odpowiedź po dodaniu tego komentarza. Zmieniłem też typ 'ipQuads' z' unsigned char' na 'unsigned int', aby test mógł się zawieść. –
Ponieważ iOS 4 RegExps są dostępne w SDK iOS: http://developer.apple.com/library/IOs/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html ... więc, może jeśli chcesz zaznaczyć ta odpowiedź jako przestarzała "ale przydatna do celów informacyjnych lub edukacyjnych" pomoże :) –
Sztuczka można zrobić, to sprawdzić powrót inet_aton rozmowy BSD tak:
#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;
}
Należy pamiętać jednak, że ta sprawdza ciąg czy zawiera on adres IP w dowolnym formacie, to nie jest ograniczony do formatu kropkowanego.
FYI: 'inet_aton' jest przestarzałe na rzecz' inet_pton', który obsługuje IPv6. – mattt
Proszę, jeśli yo zwraca wartość boolowską, jeśli sprawdzisz, jeśli zwrócisz samo sprawdzanie, np. 'Return success == 1' –
Oto kategoria wykorzystująca nowoczesny inet_pton, który zwróci TAK dla prawidłowego ciągu IPv4 lub 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
Dla odniesienia w przyszłości sukces == 1? TRUE: FALSE nie jest potrzebne. Prosty sukces == 1 zadziałałby. – varikin
wydanie 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. Jak sprawdzić poprawność wyrażenia regularnego?
- 2. Jak mogę sprawdzić poprawność kodu kultury za pomocą wyrażenia regularnego?
- 3. Jak sprawdzić poprawność adresu IP w Pythonie?
- 4. Dopasuj wzór adresu URL w php za pomocą wyrażenia regularnego
- 5. Jak sprawdzić poprawność adresu URL w java za pomocą wyrażeń regularnych?
- 6. Jak sprawdzić nazwę użytkownika za pomocą wyrażenia regularnego?
- 7. Jak sprawdzić poprawność XHTML za pomocą nokogiri?
- 8. Weryfikacja karty kredytowej za pomocą wyrażenia regularnego?
- 9. numery Normalizacja telefonu za pomocą wyrażenia regularnego
- 10. Uwierzytelnianie za pomocą adresu IP w Django
- 11. Jak znaleźć dokładne słowo za pomocą wyrażenia regularnego w Javie?
- 12. Jak mogę usunąć tekst w nawiasach za pomocą wyrażenia regularnego?
- 13. Jak dopasować znaki cyrylicy za pomocą wyrażenia regularnego
- 14. JavaScript Regex: Jak pogrubić określone słowa za pomocą wyrażenia regularnego?
- 15. walidacja email za pomocą wyrażenia regularnego w JSF 2/PrimeFaces
- 16. Umieszczanie spacji w łańcuchu wielbłądów za pomocą wyrażenia regularnego
- 17. Dzielenie ciągu za pomocą wyrażenia regularnego w Go
- 18. Jak sprawdzić poprawność adresu URL w jquery przy użyciu Regex?
- 19. Symfony2 - Jak sprawdzić poprawność adresu e-mail w kontrolerze
- 20. Jak sprawdzić poprawność pola przesyłania plików za pomocą Javascript/jquery
- 21. Jak sprawdzić poprawność pliku html za pomocą C#?
- 22. Case-insenstive uporządkowane wyszukiwanie słów za pomocą wyrażenia regularnego
- 23. Jak sprawdzić poprawność pustego tagu wartości ciągu w xsd
- 24. Dzielenie prostej struktury JSON za pomocą wyrażenia regularnego
- 25. Automatyczne łączenie wyrażenia regularnego
- 26. Jak włączyć rejestrowanie adresu IP za pomocą Log4Net
- 27. Jak sprawdzić poprawność tablicy?
- 28. Jak sprawdzić, czy element istnieje za pomocą wyrażenia lambda?
- 29. Minimalna długość wyrażenia regularnego
- 30. Jak umieścić zmienną w dopasowaniu wyrażenia regularnego?
ja tego nie rozumiem. Dlaczego to muszą być wyrażenia regularne? – soulmerge
Lepiej radzić sobie z NSScanner, biorąc pod uwagę, że nie ma wbudowanej biblioteki regex. –
Jak mogę to zrobić z NSSCanner? – diana