Большое количество является стандартным временем JS
new Date(1221644506800)
среда 17 сентября 2008 19:41:46 GMT+1000 (EST)
Этот содержит патч для Regexp :: Common, демонстрирующий полное, точное, протестированное регулярное выражение IPv6. Это прямой перевод грамматики IPv6. Regexp :: IPv6 также является точным.
Что еще более важно, он содержит набор тестов. Запуск его с вашим регулярным выражением показывает, что вам еще далеко. 10 из 19 пропущены. 1 из 12 ложных срабатываний. IPv6 содержит множество специальных сокращений, позволяющих легко ошибиться.
Лучшее место для чтения того, что входит в адрес IPv6, - это RFC 3986 раздел 3.2.2.
Что значит нельзя просто использовать библиотеку? Как насчет модуля? Regexp :: IPv6
даст вам то, что вам нужно.
Я не эксперт по IPv6, но, пожалуйста, поверьте мне, когда я скажу вам, что сопоставление (не говоря уже о проверке) адресов IPv6 непросто с помощью очень простого регулярного выражения, такого как то, которое вы предлагаете. Существует множество сокращений и различных соглашений для объединения адреса с портом, просто чтобы назвать пример. Одним из таких сокращений является то, что вы можете записать 0: 0: 0: 0: 0: 0: 0: 1 как :: 1, но это еще не все. Если вы читаете по-немецки, я бы посоветовал посмотреть слайды выступления Штеффена Ульриха на 11-м семинаре German Perl Workshop.
Вы говорите, что не можете использовать библиотеку, но если вы собираетесь изобретать заново вся сложность библиотеки, то вы можете просто импортировать ее дословно в свой проект.
Попробуйте следующее:
^([0-9a-fA-F]{4}|0)(\:([0-9a-fA-F]{4}|0)){7}$
От Обычное Библиотека выражений: IPv6-адрес
Вы также должны прочитать это: Регулярное выражение для IPv6-адресов