2012-07-12 698 views
14

Estoy tratando de escribir una expresión regular que facilite una dirección, ejemplo 21-big walk way o 21 St.Elizabeth's drive Se me ocurrió la siguiente expresión regular pero no estoy muy interesado en cómo incorporar todos los caracteres (alfanuméricos, guiones espacio, punto, apóstrofe)Expresión regular para la validación del campo de dirección

"regexp=^[A-Za-z-0-99999999' 
+2

Este es un propósito muy vaga de una expresión regular. ¿Cuáles son las limitaciones? ¿Qué personajes están permitidos/no permitidos? Una dirección podría contener prácticamente cualquier cosa. Además, '0-99999' no tendrá ningún efecto, ya que esta es una clase de carácter: coincide con un carácter a la vez, por lo que debe ser simplemente' 0-9'. – Utkanos

+0

Regex es demasiado específico o demasiado flojo para este propósito. Solo puede validar para ver algo ** que parece ** una dirección o no. – nhahtdh

Respuesta

20

Dames,

ver la respuesta a esta pregunta en la dirección de la validación de la expresión regular: regex street address match

T El problema es que las direcciones de las calles varían tanto en el formato que es difícil codificarlas. Si está intentando validar direcciones, es muy difícil determinar si una de ellas no es válida en función de su formato. Esto devolvería la siguiente dirección (253 N. St. de la cereza), cualquier cosa con su mismo formato:

\d{1,5}\s\w.\s(\b\w*\b\s){1,2}\w*\. 

Esto permite 1-5 dígitos para el número de casa, un espacio, un carácter seguido de un punto (para N. o S.), 1-2 palabras para el nombre de la calle, terminado con una abreviatura (como st. o rd.).

Como se usa regex para ver si las cosas cumplen con un estándar o protocolo (que usted define), probablemente no desee permitir las direcciones proporcionadas anteriormente, especialmente la primera con el guión, ya que no son muy estándar. se puede modificar mi código para permitir que para ellos si lo desea - puede agregar

(-?) 

para permitir un guión, pero no requerir una.

Además, http://rubular.com/ es una forma rápida e interactiva de aprender regex. Pruébelo con las direcciones anteriores.

2

He utilizado con éxito;

Dim regexString = New stringbuilder 
    With regexString 
     .Append("(?<h>^[\d]+[ ])(?<s>.+$)|")    'find the 2013 1st ambonstreet 
     .Append("(?<s>^.*?)(?<h>[ ][\d]+[ ])(?<e>[\D]+$)|") 'find the 1-7-4 Dual Ampstreet 130 A 
     .Append("(?<s>^[\D]+[ ])(?<h>[\d]+)(?<e>.*?$)|") 'find the Terheydenlaan 320 B3 
     .Append("(?<s>^.*?)(?<h>\d*?$)")     'find the 245e oosterkade 9 
    End With 

    Dim Address As Match = Regex.Match(DataRow("customerAddressLine1"), regexString.ToString(), RegexOptions.Multiline) 

    If Not String.IsNullOrEmpty(Address.Groups("s").Value) Then StreetName = Address.Groups("s").Value 
    If Not String.IsNullOrEmpty(Address.Groups("h").Value) Then HouseNumber = Address.Groups("h").Value 
    If Not String.IsNullOrEmpty(Address.Groups("e").Value) Then Extension = Address.Groups("e").Value 

La expresión regular intentará encontrar un resultado, si no hay ninguno, pasará a la siguiente alternativa. Si no se encuentra ningún resultado, ninguno de los 4 formatos está presente.

7

En caso de que si no tiene un formato fijo para la dirección como se mencionó anteriormente, usaría la expresión regular solo para eliminar los símbolos que no se usan en la dirección (como sybmols especializados - & (% # $^.) el resultado sería:

[A-Za-z0-9'\.\-\s\,] 
1

expresión regular es una muy mala elección para este tipo de tarea Trate de encontrar un servicio web o una base de datos de direcciones o un producto que puede limpiar datos de direcciones en lugar

relacionada.. :

4

Sólo para añadir a Serzas 'respuesta (ya que no tienen suficientes repeticiones. comentar). alfabetos y números pueden reemplazarse efectivamente por \ w por palabras. Además, el apóstrofo, la coma, el punto y el guión no necesariamente requieren una barra invertida. Mi requerimiento también incluía barras diagonales delanteras y traseras, y finalmente espacios en blanco con \ s.La expresión regular de trabajo para mí, como tal, era:

pattern: "[\w',-\\/.\s]" 
1

Expresión regular para la validación de direcciones sencilla

^[#.0-9a-zA-Z\s,-]+$ 

P. ej para Dirección coincide con el caso

#1, North Street, Chennai - 11 

E.g. para la Dirección no coincidir caso

$1, North Street, Chennai @ 11 
+1

Pega el texto aquí en lugar de publicar capturas de pantalla. – bfontaine

+0

Lo siento. Expresión regular para validación de dirección simple ^ [#. 0-9a-zA-Z \ s, -] + $ E.g. para el caso de coincidencia de dirección # 1, North Street, Chennai - 11 y E.g. para la dirección no coincide con el caso $ 1, North Street, Chennai @ 11 – AJK

+0

Gracias. Utilice el botón Editar para agregar este texto en su respuesta. – bfontaine

Cuestiones relacionadas