Bir IP adresini Objective-C'de nasıl doğrularsınız?Bir IP adresini Objective-C'de düzenli ifadeyle nasıl doğrularsınız?
cevap
İşte size yardımcı olabilecek alternatif bir yaklaşım. Diyelim ki biçim a.b.c.d arasında ipAddressStr
denilen IP adresi içeren bir NSString*
, olduğunu varsayalım:
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]);
}
Sen doğrulama bu düzeyde gerekiyorsa, RFC 1918 kurallara uymayı if
koşullu blok değiştirebilir. o sınırlı değildir,
#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;
}
herhangi biçimde bir ip adresi içeriyorsa bu dizeyi doğrulama Ancak unutmayın:
Alex, sscanf için her ipQuad argümanından önce bir '&' koymak istediniz mi? –
Yapmak istedim ama yapmadım. Bu yorumu ekledikten sonra cevabı düzenleyeceğim. Ayrıca, "ipQuads" türünü "imzasız char" dan "unsigned int" olarak değiştirdim, böylece testin başarısız olma şansı var. –
iOS 4'den itibaren RegExps iOS SDK'da kullanılabilir: http://developer.apple.com/library/IOs/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html ... yani, eğer işaretlemek isterseniz Bu yanıt, "ama bilgilendirici ya da eğitim amaçlı yararlı" olarak kabul edilecektir :) –
Yapabileceğiniz bir hile böyle inet_aton BSD çağrının dönüşünü sınamak olduğunu noktalı formatta.
FYI: 'inet_aton', IPv6'yı işleyen inet_pton'un lehine kullanımdan kaldırıldı. – mattt
Eğer bir boole döndürüyorsanız lütfen kontrol edin, eğer geri dönüp dönmeyin, sadece kendi başına kontrol edin = ''return success == 1' –
Geçerli bir IPv4 veya IPv6 dizesi için YES döndürecek olan modern inet_pton'u kullanarak bir kategori.
#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
Gelecekte referans için, başarı == 1? TRUE: FALSE gerekli değil. Basit bir başarı == 1 çalışırdı. – varikin
Swift baskı:
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. Kullanıcının IP Adresini Alın
- 2. Ip adresini uzak bir makineden nasıl edinirsiniz?
- 3. Perl: Karma anahtarların düzenli bir ifadeyle eşleştirilmesi
- 4. Sunucumun IP adresini PHP (CLI)
- 5. Powershell IP adresini Integer'e dönüştürün
- 6. IP adresini rubire olarak değiştir
- 7. İstemci IP Adresini nasıl alabilirim? HttpServletRequest
- 8. IP adresini komut satırından nasıl kopyalayıp ayrıştırabilirim?
- 9. phpmyadmin'den mySQL sunucusu ip adresini nasıl bulurum?
- 10. Düzenli bir ifadenin kendisi normal bir ifadeyle ayrıştırılabilir mi?
- 11. Düzenli ifadeyle '-' (tire) dışında tüm \ W (harfleri yok) nasıl değiştirilir?
- 12. Bir sunucuyu Firebase'e nasıl doğrularsınız?
- 13. İstemcinin ve Sunucunun IP adresini bulma
- 14. Bir istemcinin IP Adresini Alma Bir web hizmeti için
- 15. Pencerelerde ip adresini değiştirmek için komut dosyası
- 16. IP adresini ana bilgisayar adına dönüştürme
- 17. Sistemin Ip ve mac adresini edinin
- 18. java uygulamasından doğru yerel IP adresini alın
- 19. Scala Play Framework Kullanıcının IP adresini alıyorum
- 20. Dize, düzenli ifadeyle tüm kapaklar olup olmadığını belirleme
- 21. API kullanarak bir kapsayıcıdan Swarm düğümü IP adresini al?
- 22. Site talebi kullanmadan gerçek IP adresini nasıl alabilirim? C#
- 23. iOS'ta bağlanmak için kullanılan tam IP adresini nasıl edinebilirim?
- 24. SunucuSocket + client Soket - istemcinin IP adresini nasıl alabilirim?
- 25. Dizgi olarak temsil edilen IP adresini nasıl artırırım?
- 26. Gönderen IP adresini curl kullanarak nasıl taklit edebilirim?
- 27. Düzenli ifadeyle eşleşen dizeyi içeren DOM öğesini bulun
- 28. Harici ana bilgisayar kullanmadan aygıtın harici IP adresini nasıl programlanır?
- 29. Farklı bir bağlantı noktasında IP adresini kullanarak SSH üzerinde git
ben bunu anlamıyorum. Neden düzenli ifadeler olmak zorunda? – soulmerge
Yerleşik bir regex kitaplığı olmadığında NSScanner ile daha iyi olabilirsiniz. –
NSSCanner ile bunu nasıl yapabilirim? – diana