Wydaje mi się, że nie mogę edytować najwyższego postu, więc dodam tutaj swoją odpowiedź.
Dla nazwy hosta - łatwa odpowiedź, na przykład egrep tutaj - http: //www.linuxinsight.com/how_to_grep_for_ip_addresses_using_the_gnu_egrep_utility.html
egrep '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'
Chociaż przypadek nie uwzględnia wartości takich jak 0 w pierwszym oktecie i wartości większych niż 254 (adresy IP) lub 255 (maska sieci). Może pomoże dodatkowe oświadczenie if.
Co do legalnej nazwy hosta dns, pod warunkiem, że sprawdzasz tylko nazwy hostów internetowych (a nie intranet), napisałem następujący fragment, mieszankę powłoki / php, ale powinien on być stosowany jako każde wyrażenie regularne.
najpierw przejdź na stronę ietf, pobierz i przeanalizuj listę nazw domen poziomu 1:
tld=$(curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | sed 1d | cut -f1 -d'-' | tr '\n' '|' | sed 's/\(.*\)./\1/')
echo "($tld)"
To powinno dać ci ładny kod, który sprawdza legalność najlepszych nazw domen, takich jak .com .org lub .ca
Następnie dodaj pierwszą część wyrażenia zgodnie z wytycznymi tutaj - http: //www.domainit.com/support/faq.mhtml?category=Domain_FAQ&question=9 (dowolna kombinacja alfanumeryczna i symbol „-”, myślnik nie powinien być początek lub koniec oktetu.
(([a-z0-9]+|([a-z0-9]+[-]+[a-z0-9]+))[.])+
Następnie poskładaj wszystko razem (przykład PHP preg_match):
$pattern = '/^(([a-z0-9]+|([a-z0-9]+[-]+[a-z0-9]+))[.])+(AC|AD|AE|AERO|AF|AG|AI|AL|AM|AN|AO|AQ|AR|ARPA|AS|ASIA|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BIZ|BJ|BM|BN|BO|BR|BS|BT|BV|BW|BY|BZ|CA|CAT|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|COM|COOP|CR|CU|CV|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EDU|EE|EG|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GOV|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|INFO|INT|IO|IQ|IR|IS|IT|JE|JM|JO|JOBS|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MG|MH|MIL|MK|ML|MM|MN|MO|MOBI|MP|MQ|MR|MS|MT|MU|MUSEUM|MV|MW|MX|MY|MZ|NA|NAME|NC|NE|NET|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|ORG|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PRO|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|ST|SU|SV|SY|SZ|TC|TD|TEL|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TRAVEL|TT|TV|TW|TZ|UA|UG|UK|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XN|XN|XN|XN|XN|XN|XN|XN|XN|XN|XN|YE|YT|YU|ZA|ZM|ZW)[.]?$/i';
if (preg_match, $pattern, $matching_string){
... do stuff
}
Możesz także dodać instrukcję if, aby sprawdzić, czy sprawdzany ciąg jest krótszy niż 256 znaków - http://www.ops.ietf.org/lists/namedroppers/namedroppers.2003/msg00964.html