def is_valid_ip(ip): """Validates IP addresses. """ return is_valid_ipv4(ip) or is_valid_ipv6(ip)
IPv4:
def is_valid_ipv4(ip): """Validates IPv4 addresses. """ pattern = re.compile(r""" ^ (?: # Dotted variants: (?: # Decimal 1-255 (no leading 0's) [3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2} | 0x0*[0-9a-f]{1,2} # Hexadecimal 0x0 - 0xFF (possible leading 0's) | 0+[1-3]?[0-7]{0,2} # Octal 0 - 0377 (possible leading 0's) ) (?: # Repeat 0-3 times, separated by a dot \. (?: [3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2} | 0x0*[0-9a-f]{1,2} | 0+[1-3]?[0-7]{0,2} ) ){0,3} | 0x0*[0-9a-f]{1,8} # Hexadecimal notation, 0x0 - 0xffffffff | 0+[0-3]?[0-7]{0,10} # Octal notation, 0 - 037777777777 | # Decimal notation, 1-4294967295: 429496729[0-5]|42949672[0-8]\d|4294967[01]\d\d|429496[0-6]\d{3}| 42949[0-5]\d{4}|4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}| 4[01]\d{8}|[1-3]\d{0,9}|[4-9]\d{0,8} ) $ """, re.VERBOSE | re.IGNORECASE) return pattern.match(ip) is not None
IPv6:
def is_valid_ipv6(ip): """Validates IPv6 addresses. """ pattern = re.compile(r""" ^ \s* # Leading whitespace (?!.*::.*::) # Only a single whildcard allowed (?:(?!:)|:(?=:)) # Colon iff it would be part of a wildcard (?: # Repeat 6 times: [0-9a-f]{0,4} # A group of at most four hexadecimal digits (?:(?<=::)|(?
версия IPv6 использует"
(?:(?<=::)|(?", который мог быть заменен"
(?(?" на regex механизмах, которые поддерживают условные выражения со взглядом-arounds. (т.е. PCRE.NET)
Редактирование:
Edit2:
я нашел некоторое обсуждение ссылок, как проанализировать адреса IPv6 с regex:
Edit3:
Наконец сумел записать шаблон, который проходит все тесты, и что я также доволен.
Решением стала комбинация очистки и этой ошибки набора карт . представление карты удерживало своего делегата после того, как я выпустил свой NSManagedObjectContext. Mapkit запросил у делегата координаты аннотации, и мой объект-делегат попытался запросить объект, который находился в выпущенном контексте (аналогично проблеме Джейсона).
Исправление было таким, как описано в сообщении блога Джейка - установить делегата до нуля, когда вы закончите просмотр карты.
Что делает второй контекст, когда он пытается устранить ошибку в объекте, который был удален из постоянного хранилища?
Это похоже на ошибку, которая может состоять из двух частей: вы не ' t объединение изменений из контекста партнера, и у вас есть логическая ошибка, из-за которой вы используете объект в потоке B, который был удален в потоке A.
Обычно вы хотите объединить изменения из контекста партнера, используя - [NSManagedObjectContext mergeChangesFromContextDidSaveNotification:]
.
Я столкнулся с этой ошибкой раньше, и причина заключалась в том, что я очищал (завершил и выпустил) свой контекст, а затем позже попытался получить доступ к объекту (ранее), управляемому этим контекстом.
В моем случае контекст был контекстом «царапины», который исчезает при закрытии представления. Однако у меня было фоновое задание, созданное представлением, которое хотело обновить объект.
В итоге я создал метод доступа для управляемого объекта, который возвращал ноль, когда [managedObject isFault] было истинным. Затем в своем коде я проверял значение этого селектора средств доступа, чтобы убедиться, что у меня есть допустимый объект для работы (скажем, когда мое фоновое задание, наконец, завершило свою работу).
Я новичок в Core Data, так что, вероятно, есть лучший / более разумный способ сделать это, но я думаю, что это устранило проблему для меня.