Je ne semble pas être en mesure de modifier le poste le plus élevé, donc je vais ajouter ma réponse ici.
Pour le nom d'hôte - la réponse est facile, sur egrep exemple ici -- http: //www.linuxinsight.com/how_to_grep_for_ip_addresses_using_the_gnu_egrep_utility.html
egrep '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'
Bien que le cas ne tient pas compte des valeurs de 0 dans le premier octet, et les valeurs supérieures à 254 (adresse ip) ou 255 (masque de réseau). Peut-être un supplémentaire si l'instruction de l'aide.
Concernant les dns du nom d'hôte, à condition que vous vérifiez pour des noms d'hôtes internet uniquement (et non intranet), j'ai écrit ce ciselée, un mélange de shell/php, mais il devrait être applicable à toute expression régulière.
d'abord aller à l'ietf site web, de télécharger et d'analyser une liste de juridique de niveau 1, les noms de domaine:
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)"
Cela devrait vous donner une belle pièce de re code qui vérifie la légalité du haut nom de domaine, tel .com .org ou .ca
Ajoutez ensuite la première partie de l'expression selon les lignes directrices se trouvent ici -- http: //www.domainit.com/support/faq.mhtml?category=Domain_FAQ&question=9 (toute combinaison alphanumérique et le symbole' -', le tableau de bord ne doit pas être dans le début ou la fin d'un octet.
(([a-z0-9]+|([a-z0-9]+[-]+[a-z0-9]+))[.])+
Puis mettre le tout ensemble (PHP preg_match exemple):
$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
}
Vous pouvez également ajouter une instruction if pour vérifier que la chaîne qui vous intéresse est inférieure à 256 caractères -- http://www.ops.ietf.org/lists/namedroppers/namedroppers.2003/msg00964.html
0 votes
Attention : Il est possible de savoir si une chaîne de caractères est une adresse IPv4 valide et de savoir s'il s'agit d'un nom d'hôte valide. Mais : Il n'est pas possible de savoir si une chaîne de caractères est une adresse IPv4 valide ou un nom d'hôte valide. La raison : Toute chaîne qui correspond à une adresse IPv4 valide est également un nom d'hôte valide qui peut être résolu en une adresse IP différente par le serveur DNS.