Puede usar las siguientes expresiones regulares por separado o combinándolas en una expresión OR conjunta.
ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";
ValidIpAddressRegex coincide con las direcciones IP válidas y los nombres de host válidos ValidHostnameRegex . Dependiendo del idioma que use, \ podría tener que escapar con \.
ValidHostnameRegex es válido según RFC 1123 . Originalmente, RFC 952 especificaba que los segmentos de nombre de host no podían comenzar con un dígito.
http://en.wikipedia.org/wiki/Hostname
La especificación original de los nombres de host en RFC 952 , ordenaba que las etiquetas no pudieran comenzar con un dígito o con un guión, y no deberían terminar con un guión. Sin embargo, una especificación posterior ( RFC 1123 ) permitió que las etiquetas de nombre de host comenzaran con dígitos.
Valid952HostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";
éxämplè.com
=xn--xmpl-loa1ab.com
) y luego validarse.123.456.789.0
y dice que es un nombre de host válido.La expresión regular del nombre de host de smink no observa la limitación en la longitud de las etiquetas individuales dentro de un nombre de host. Cada etiqueta dentro de un nombre de host válido no puede tener más de 63 octetos de longitud.
Tenga en cuenta que la barra diagonal inversa al final de la primera línea (arriba) es la sintaxis de shell Unix para dividir la línea larga. No es parte de la expresión regular en sí.
Aquí está solo la expresión regular sola en una sola línea:
También debe verificar por separado que la longitud total del nombre de host no debe exceder los 255 caracteres . Para obtener más información, consulte RFC-952 y RFC-1123.
fuente
/^[a-z\d]([a-z\d\-]{0,61}[a-z\d])?(\.[a-z\d]([a-z\d\-]{0,61}[a-z\d])?)*$/i
Para hacer coincidir una dirección IP válida , use la siguiente expresión regular:
en vez de:
Explicación
Muchos motores regex coinciden con la primera posibilidad en la
OR
secuencia. Por ejemplo, intente la siguiente expresión regular:Prueba
Prueba la diferencia entre lo bueno y lo malo
fuente
([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*
versus([a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]|[a-zA-Z0-9])(\.([a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])|[a-zA-Z0-9]))*
+
al final en lugar de*
ver el fallo.Parece que no puedo editar la publicación principal, así que agregaré mi respuesta aquí.
Para el nombre de host: respuesta fácil, en el ejemplo de egrep aquí: http: //www.linuxinsight.com/how_to_grep_for_ip_addresses_using_the_gnu_egrep_utility.html
Aunque el caso no tiene en cuenta valores como 0 en el primer octeto, y valores superiores a 254 (direcciones IP) o 255 (máscara de red). Tal vez una declaración if adicional ayudaría.
En cuanto al nombre de host DNS legal, siempre que esté buscando solo nombres de host de Internet (y no intranet), escribí el siguiente recorte, una mezcla de shell / php, pero debería ser aplicable como cualquier expresión regular.
primero vaya al sitio web de ietf, descargue y analice una lista de nombres de dominio legales de nivel 1:
Eso debería darle un buen código de re que verifique la legalidad del nombre de dominio principal, como .com .org o .ca
Luego agregue la primera parte de la expresión de acuerdo con las pautas que se encuentran aquí: http: //www.domainit.com/support/faq.mhtml?category=Domain_FAQ&question=9 (cualquier combinación alfanumérica y el símbolo '-', el guión no debe estar en El principio o el final de un octeto.
Luego póngalo todo junto (ejemplo de PHP preg_match):
También es posible que desee agregar una instrucción if para verificar que la cadena que está verificando tiene menos de 256 caracteres: http://www.ops.ietf.org/lists/namedroppers/namedroppers.2003/msg00964.html
fuente
Vale la pena señalar que hay bibliotecas para la mayoría de los idiomas que hacen esto por usted, a menudo integradas en la biblioteca estándar. Y es probable que esas bibliotecas se actualicen mucho más a menudo que el código que copió de una respuesta de Desbordamiento de pila hace cuatro años y se olvidó. Y, por supuesto, también analizarán la dirección en una forma utilizable, en lugar de simplemente darle una coincidencia con un grupo de grupos.
Por ejemplo, detectar y analizar IPv4 en (POSIX) C:
Obviamente, tales funciones no funcionarán si está intentando, por ejemplo, encontrar todas las direcciones válidas en un mensaje de chat, pero incluso allí, puede ser más fácil usar una expresión regular simple pero demasiado celosa para encontrar posibles coincidencias, y luego usar el biblioteca para analizarlos.
Por ejemplo, en Python:
fuente
fuente
Creo que esta es la mejor expresión regular de validación Ip. por favor verifíquelo una vez !!!
fuente
fuente
Esto funciona para direcciones IP válidas:
fuente
fuente
Aquí hay una expresión regular que utilicé en Ant para obtener una IP de host proxy o un nombre de host de ANT_OPTS. Esto se utilizó para obtener la IP del proxy para poder ejecutar una prueba "inalcanzable" de Ant antes de configurar un proxy para una JVM bifurcada.
fuente
\w
justo allí, no capturará IP, solo el nombre de host en ciertas situaciones.Encontré que esto funciona bastante bien para las direcciones IP. Se valida como la respuesta principal, pero también se asegura de que la ip esté aislada para que no haya texto o más números / decimales después o antes de la ip.
fuente
esto se usa solo para este tipo de validación
funciona solo si http://www.kk.com http://www.kk.co.in
no funciona para
http://www.kk.com/ http: //www.kk.co.in.kk
http://www.kk.com/dfas http://www.kk.co.in/
fuente
prueba esto:
Funciona en mi caso.
fuente
Con respecto a las direcciones IP, parece que hay cierto debate sobre si incluir ceros a la izquierda. Alguna vez fue una práctica común y generalmente se acepta, por lo que diría que deben marcarse como válidos independientemente de la preferencia actual. También hay cierta ambigüedad sobre si el texto antes y después de la cadena debe validarse y, nuevamente, creo que debería. 1.2.3.4 es una IP válida, pero 1.2.3.4.5 no lo es y ni la porción 1.2.3.4 ni la porción 2.3.4.5 deberían dar lugar a una coincidencia. Algunas de las preocupaciones se pueden manejar con esta expresión:
La parte desafortunada aquí es el hecho de que la porción de expresión regular que valida un octeto se repite como es cierto en muchas soluciones ofrecidas. Aunque esto es mejor que para las instancias del patrón, la repetición puede eliminarse por completo si las subrutinas son compatibles con la expresión regular que se utiliza. El siguiente ejemplo habilita esas funciones con el
-P
interruptor degrep
y también aprovecha la funcionalidad de mirar hacia adelante y hacia atrás. (El nombre de la función que seleccioné es 'o' para octeto. Podría haber usado 'octeto' como nombre pero quería ser conciso).El manejo del punto en realidad podría crear falsos negativos si las direcciones IP están en un archivo con texto en forma de oraciones, ya que podría seguir un punto sin que sea parte de la notación punteada. Una variante de lo anterior solucionaría eso:
fuente
fuente
El nuevo marco de red tiene inicializadores disponibles para struct IPv4Address y struct IPv6Address que manejan la parte de la dirección IP con mucha facilidad. Hacer esto en IPv6 con una expresión regular es difícil con todas las reglas de acortamiento.
Lamentablemente, no tengo una respuesta elegante para el nombre de host.
Tenga en cuenta que el marco de red es reciente, por lo que puede obligarlo a compilar para versiones recientes del sistema operativo.
fuente
¿Qué tal esto?
fuente
en php:
filter_var(gethostbyname($dns), FILTER_VALIDATE_IP) == true ? 'ip' : 'not ip'
fuente
Comprobando nombres de host como ... mywebsite.co.in, thangaraj.name, 18thangaraj.in, thangaraj106.in, etc.
fuente
inet_aton
es bastante bueno.Pensé en este patrón simple de coincidencia de expresiones regulares para la coincidencia de direcciones IP \ d + [.] \ D + [.] \ D + [.] \ D +
fuente
^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
y, por supuesto, esa no será la forma correcta. Si tiene un idioma para escribir script, seguramente tendrá acceso a sus funciones de red. La mejor manera de verificar una IP REAL es decirle al sistema que convierta e ip al formato correcto y luego verifique si es verdadero / falso. En el caso de Python que usosocket.inet_aton(ip)
. Caso de PHP que necesitainet_aton($ip)
.