elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General (Moderador: Eleкtro)
| | |-+  Hilo oficial: Solicitudes de Expresiones Regulares
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Hilo oficial: Solicitudes de Expresiones Regulares  (Leído 5,567 veces)
WHK
吴阿卡
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.812


The Hacktivism is not a crime


Ver Perfil WWW
Hilo oficial: Solicitudes de Expresiones Regulares
« en: 8 Mayo 2015, 21:53 »



Hola, inicio este hilo para todo aquel que necesite una regla en expresión regular pero no tiene el conocimiento para hacerlo.

¿Cuantas veces hemos querido crear una regla con redirección de urls en apache o filtrar archivos en c# o parsear campos en Java y no lo podemos hacer porque no sabemos Exmpresiones regulares o son muy complejas?

Bueno, este hilo es para todos los que se sientan identificados con ello. No te sientas mal por no saber sobre Expresiones regulares, nadie nace con una enciclopedia bajo el brazo, todos aprendemos en algún momento, yo antes no sabía, ahora se algo y por eso quiero ayudar también a todo el que lo necesite.

Si eres una persona con conocimientos en Expresión regular entonces puedes ayudar a los que lo necesiten.


Herramientas para validar Expresiones, probar ejemplos y postearlos en el foro:

Validación de expresiones online
http://regexr.com/

Ejecución online de código javascript, CSS y HTML
https://jsfiddle.net/

Ejecución online de código ejecutable e interpretable:
http://runnable.com/


Bienvenidos todos y Enjoy!


« Última modificación: 8 Mayo 2015, 23:04 por WHK » En línea

Pablo Videla


Desconectado Desconectado

Mensajes: 2.273



Ver Perfil WWW
Re: Hilo oficial: Solicitudes de Expresiones Regulares
« Respuesta #1 en: 8 Mayo 2015, 21:59 »

Excelente iniciativa, necesito expresiones regulares que detecte un apellido compuesto como un unico apellido por ejemplo:

Pedro De Videla Torres

De videla = 1er apellido, torres 2do apellido

Ena von Baer  Guzman

  von Baer 1er apellido Guzman 2do apellido.

Espero que se entienda =P Saludos y gracias de antemano  :)


En línea

WHK
吴阿卡
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.812


The Hacktivism is not a crime


Ver Perfil WWW
Re: Hilo oficial: Solicitudes de Expresiones Regulares
« Respuesta #2 en: 8 Mayo 2015, 22:06 »

Te sirve así?
Código:
/([a-z]+\s+(de\s+la|de)\s+[a-z]+)/i

Primero busca una palabra que sería el primer nombre compuesto sobre el apellido con [a-z]+ el cual debe ser obligatorio, luego debe contener un espacio o tabulación , luego la concatenación común "de o de la como por ejemplo: de la costa", luego otro espacio y al final el último apellido. El argumento "i" es para que no sea sensible a las mayúsculas, en caso contrario habría que reemplazar [a-z] por [a-zA-Z].

Edito, agrego caracteres latinos:
Código:
/([a-zñÑáéíóúÁÉÍÓÚ]+\s+(de\s+la|de)\s+[a-za-zñÑáéíóúÁÉÍÓÚ]+)/i
ya que las exmpresiones regulares por defecto se trabajan en utf-8 sin soporte para carácteres latinos dependiendo del lenguaje de programación:





Saludos.

Edito otraves,... acabo de ver tu edición xD, pues es dificil ya que todas las palabras ya sean nombres o apellidos cumplen con las mismas reglas, lo único que se me ocurre es tener una base de datos con nombres y apellidos y hacerles match con sql o similar. Por lo menos la expresión anterior te detecta apellidos que contenga "de" y "de la", se puede modificar para agregar mas tipos de concatenaciones.

Ejemplo online:
http://regexr.com/3ave5
« Última modificación: 8 Mayo 2015, 22:23 por WHK » En línea

Pablo Videla


Desconectado Desconectado

Mensajes: 2.273



Ver Perfil WWW
Re: Hilo oficial: Solicitudes de Expresiones Regulares
« Respuesta #3 en: 8 Mayo 2015, 22:21 »

Gracias por la respuesta estoy probando pero no me resulta, hice este mini script para probar xD  y me dice nop, probe con "Pablo de videla torres" "pablo de la torre" "pablo de la torre guzman" cosas al azar pero no me da

Código
  1.  
  2.  
  3. function valida(){
  4. var prueba = "/([a-zñÑáéíóúÁÉÍÓÚ]+\s+(de|la)\s+[a-za-zñÑáéíóúÁÉÍÓÚ])/i";
  5. var campo = document.getElementById("campo");
  6. alert(campo.value);
  7. if ((campo.value.match(prueba)) && (campo.value!='')) {
  8.        alert('expresion Correcta');
  9.    } else {
  10.        alert("nop");
  11.        campo.focus();
  12.    }
  13. }
  14.  
  15.  
  16.  

Código
  1. <input type="text" id="campo"></input>
  2. <button id="bt" onclick="valida()">Prueba</button>
En línea

WHK
吴阿卡
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.812


The Hacktivism is not a crime


Ver Perfil WWW
Re: Hilo oficial: Solicitudes de Expresiones Regulares
« Respuesta #4 en: 8 Mayo 2015, 22:33 »

Porque faltó el último apellido, prueba con este para validar el último apellido:
Código:
/([a-zñÑáéíóúÁÉÍÓÚ]+\s+((de\s+la|de)\s+)*[a-zñÑáéíóúÁÉÍÓÚ]+(\s+)*([a-zñÑáéíóúÁÉÍÓÚ]+)*)/i

Invertí las reglas, ahora la concatenación "de" y "de la" con opcionales y solo permite dos apellidos incluyendo uno concatenado aunque el último también es opcional.

Código
  1. function valida(){
  2. var prueba = "/([a-zñÑáéíóúÁÉÍÓÚ]+\s+((de\s+la|de)\s+)*[a-zñÑáéíóúÁÉÍÓÚ]+(\s+)*([a-zñÑáéíóúÁÉÍÓÚ]+)*)/i";
  3. var campo = document.getElementById("campo");
  4. alert(campo.value);
  5. if ((campo.value.match(prueba)) && (campo.value!='')) {
  6. alert('expresion Correcta');
  7. } else {
  8. alert("nop");
  9. campo.focus();
  10. }
  11. }

Pablo de videla torres -> Válido
pablo de la torre -> Válido
pablo de la torre guzman -> Válido
Pablo guzman -> Válido
pablo de la torre guzman abc def ghi -> inválido

Si quieres que la validación sea obligadamente apellidos concatenados entonces reemplaza ((de\s+la|de)\s+)* por ((de\s+la|de)\s+)+

Recuerda trabajar siempre con UTF-8 o si no tendrás que utilizar secuencia de escape para carácteres unicode en javascript o hexadecimales vy agregar múltiples condicionales para múltiples codificaciones, por eso mejor usa siempre utf-8 y no tendrás problemas con las validaciones en los acentos..
« Última modificación: 8 Mayo 2015, 22:52 por WHK » En línea

WHK
吴阿卡
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.812


The Hacktivism is not a crime


Ver Perfil WWW
Re: Hilo oficial: Solicitudes de Expresiones Regulares
« Respuesta #5 en: 8 Mayo 2015, 22:52 »

Acá te lo dejo funcionando:
https://jsfiddle.net/0xm8vcvw/

Recuerda que la expresión regular puede hacer match en uno o mas regultados dentro del mismo string por lo cual debes comparar que el primer match sea igual a tu texto completo para saber si es verdadero o no.

Saludos.
En línea

Pablo Videla


Desconectado Desconectado

Mensajes: 2.273



Ver Perfil WWW
Re: Hilo oficial: Solicitudes de Expresiones Regulares
« Respuesta #6 en: 8 Mayo 2015, 22:53 »

Que raro, copie exacto tu cambio y me sigue respondiendo "nop", que podría ser?

Probe tus ejemplos y me lo toma invalido. (Gracias por las recomendaciones, siempre trabajo con utf8 solo que esto es un PoC )

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.


Tomare tu ultimo ejemplo no lo habia leido, gracias!
En línea

WHK
吴阿卡
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.812


The Hacktivism is not a crime


Ver Perfil WWW
Re: Hilo oficial: Solicitudes de Expresiones Regulares
« Respuesta #7 en: 8 Mayo 2015, 22:58 »

Mira esto: https://jsfiddle.net/0xm8vcvw/5/

He modificado la expresión regular para que cada nombre y apellido deba contener por lo menos 3 carácteres hasta 15, así la validación es mayor y previenes la validación de textos como "Pablo el loco", también agregué la concatenación "de las" y "las" para validar nombres como por ejemplo "Pablo de las mercedes" o "Pablo las casas":

Código:
/([a-zñÑáéíóúÁÉÍÓÚ]{3,15}\s+((de\s+la|de\s+las|de|las)\s+)*[a-zñÑáéíóúÁÉÍÓÚ]{3,15}(\s+)*([a-zñÑáéíóúÁÉÍÓÚ]{3,15})*)/i
« Última modificación: 8 Mayo 2015, 23:02 por WHK » En línea

Pablo Videla


Desconectado Desconectado

Mensajes: 2.273



Ver Perfil WWW
Re: Hilo oficial: Solicitudes de Expresiones Regulares
« Respuesta #8 en: 11 Mayo 2015, 18:01 »

Ahi me funciona, disculpa la demora se me habia estropeado el cargador  :xD es cosa de agregar mas palabras, es capaz de detectar el apellido compuesto en el lugar del materno en vez del paterno?
En línea

WHK
吴阿卡
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.812


The Hacktivism is not a crime


Ver Perfil WWW
Re: Hilo oficial: Solicitudes de Expresiones Regulares
« Respuesta #9 en: 5 Julio 2015, 18:17 »

Pues es mas dificil a menos que cambies el orden pero tendras que adivinar o tener un diccionario de nombres y apellidos.

Acá les dejo un repositorio muy bueno sobre expresiones regulares y validaciones:
https://www.owasp.org/index.php/OWASP_Validation_Regex_Repository


Citar
Note
    These Regexs are examples and not built for a particular Regex engine. However, the PCRE syntax is mainly used. In particular, this means that character classes do not contain meta characters which need to be escaped, except the - and ] character, where it is assumed that a - needs not to be escaped only when it is the last character in a character class. The character class supports shortcut notations for other character classes like \s or \w which should not be used as they depend on the LOCALE environment setting in most systems.

Please carefully test the regex in your regex engine.

Código
  1. <?xml version="1.0"?>
  2.  
  3.  <regex>
  4.   <name>url</name>
  5.   <pattern><![CDATA[^((((https?|ftps?|gopher|telnet|nntp)://)|(mailto:|news:))(%[0-9A-Fa-f]{2}|[-()_.!~*';/?:@&=+$,A-Za-z0-9])+)([).!';/?:,][[:blank:]])?$]]></pattern>
  6.   <description>A valid URL per the URL spec.</description>
  7.  </regex>
  8.  
  9.  <regex>
  10.   <name>IP</name>
  11.   <pattern><![CDATA[^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$]]></pattern>
  12.   <description>A valid IP Address</description>
  13.  </regex>
  14.  
  15.  <regex>
  16.   <name>e-mail</name>
  17.   <pattern><![CDATA[^[a-zA-Z0-9+&*-]+(?:\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,7}$]]></pattern>
  18.   <description>A valid e-mail address</description>
  19.  </regex>
  20.  
  21.  <regex>
  22.   <name>safetext</name>
  23.   <pattern><![CDATA[^[a-zA-Z0-9 .-]+$]]></pattern>
  24.   <description>Lower and upper case letters and all digits</description>
  25.  </regex>
  26.  
  27.  <regex>
  28.   <name>date</name>
  29.   <pattern><![CDATA[^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$]]></pattern>
  30.   <description>Date in US format with support for leap years</description>
  31.  </regex>
  32.  
  33.  <regex>
  34.   <name>creditcard</name>
  35.   <pattern><![CDATA[^((4\d{3})|(5[1-5]\d{2})|(6011)|(7\d{3}))-?\d{4}-?\d{4}-?\d{4}|3[4,7]\d{13}$]]></pattern>
  36.   <description>A valid credit card number</description>
  37.  </regex>
  38.  
  39.  <regex>
  40.   <name>password</name>
  41.   <pattern><![CDATA[^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{4,8}$]]></pattern>
  42.   <description>4 to 8 character password requiring numbers and both lowercase and uppercase letters</description>
  43.  </regex>
  44.  
  45.  <regex>
  46.   <name>complexpassword</name>
  47.   <pattern><![CDATA[^(?:(?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))(?!.*(.)\1{2,})[A-Za-z0-9!~<>,;:_=?*+#."&§%°()\|\[\]\-\$\^\@\/]{8,32}$]]></pattern>
  48.   <description>4 to 32 character password requiring at least 3 out 4 (uppercase and lowercase letters, numbers and special characters) and no more than 2 equal characters in a row</description>
  49.  </regex>
  50.  
  51.  <regex>
  52.   <name>English_digitwords</name>
  53.   <pattern><![CDATA[^(zero|one|two|three|four|five|six|seven|eight|nine)$]]></pattern>
  54.   <description>The English words representing the digits 0 to 9</description>
  55.  </regex>
  56.  
  57.  <regex>
  58.   <name>English_daywords</name>
  59.   <pattern><![CDATA[^(Mo|Tu|We|Th|Fr|Sa|Su)$]]></pattern>
  60.   <description>English 2 character abbreviations for the days of the week</description>
  61.  </regex>
  62.  
  63.  <regex>
  64.   <name>English_monthwords</name>
  65.   <pattern><![CDATA[^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)$]]></pattern>
  66.   <description>English 3 character abbreviations for the months</description>
  67.  </regex>
  68.  
  69.  <regex>
  70.   <name>French_digitwords</name>
  71.   <pattern><![CDATA[^(z[eé]ro|un|deux|trois|quatre|cinq|six|sept|huit|neuf)$]]></pattern>
  72.   <description>The French words representing the digits 0 to 9</description>
  73.  </regex>
  74.  
  75.  <regex>
  76.   <name>German_digitwords</name>
  77.   <pattern><![CDATA[^(null|eins|zwei|drei|vier|f(ue|ü)nf|sechs|sieben|acht|neun)$]]></pattern>
  78.   <description>The German words representing the digits 0 to 9</description>
  79.  </regex>
  80.  
  81.  <regex>
  82.   <name>Spanish_digitwords</name>
  83.   <pattern><![CDATA[^(cero|uno|dos|tres|cuatro|cinco|seis|siete|ocho|nueve)$]]></pattern>
  84.   <description>The Spanish words representing the digits 0 to 9</description>
  85.  </regex>
  86.  
  87.  <regex>
  88.   <name>US_zip</name>
  89.   <pattern><![CDATA[^\d{5}(-\d{4})?$]]></pattern>
  90.   <description>US zip code with optional dash-four</description>
  91.  </regex>
  92.  
  93.  <regex>
  94.   <name>US_phone</name>
  95.   <pattern><![CDATA[^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$]]></pattern>
  96.   <description>US phone number with or without dashes</description>
  97.  </regex>
  98.  
  99.  <regex>
  100.   <name>US_state</name>
  101.   <pattern><![CDATA[^(AE|AL|AK|AP|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MP|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY)$]]></pattern>
  102.   <description>2 letter U.S. state abbreviations</description>
  103.  </regex>
  104.  
  105.  <regex>
  106.   <name>US_ssn</name>
  107.   <pattern><![CDATA[^\d{3}-\d{2}-\d{4}$]]></pattern>
  108.   <description>9 digit U.S. social security number with dashes</description>
  109.  </regex>
  110.  
  111.  <!-- Some additional examples that have not been vetted
  112.  
  113.       // HTML HEX CODE   ^#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$
  114.       // FLOATING POINT   ^[-+]?[0-9]+[.]?[0-9]*([eE][-+]?[0-9]+)?$
  115.       // PERSON NAME   ^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*$
  116.       // MAC ADDRESS  ^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$
  117.       // GUID    ^[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}$
  118.       // IP ADDRESS  ^\b((25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)\b$
  119.       // IP ADDRESS (^\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b$
  120.       // REASONABLE DOMAIN NAME   ^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$
  121.       // RFC 1918 NON ROUTABLE IP   ^(((25[0-5]|2[0-4][0-9]|19[0-1]|19[3-9]|18[0-9]|17[0-1]|17[3-9]|1[0-6][0-9]|1[1-9]|[2-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))|(192\.(25[0-5]|2[0-4][0-9]|16[0-7]|169|1[0-5][0-9]|1[7-9][0-9]|[1-9][0-9]|[0-9]))|(172\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|1[0-5]|3[2-9]|[4-9][0-9]|[0-9])))\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$
  122.       // VALID WINDOWS FILENAME  ^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?$)[^\x00-\x1f\\?*:\";|/]+$
  123.       //
  124.       //
  125.       // Warning, per http://en.wikipedia.org/wiki/ReDoS the Java Classname RegEx below is vulnerable to RegExDos
  126.       // Java Classname  ^(([a-z])+.)+[A-Z]([a-z])+$
  127.       //
  128.       //  ANY PLATFORM FILENAME   ^(([a-zA-Z]:|\\)\\)?(((\.)|(\.\.)|([^\\/:*?"|<>. ](([^\\/:*?"|<>. ])|([^\\/:*?"|<>]*[^\\/:*?"|<>. ]))?))\\)*[^\\/:*?"|<>. ](([^\\/:*?"|<>. ])|([^\\/:*?"|<>]*[^\\/:*?"|<>. ]))?$
  129.  -->
  130.  

Yo uso muchos de ellos en mis desarrollos.

Saludos.
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Expresiones Regulares
Programación General
joseru18 0 653 Último mensaje 17 Agosto 2005, 04:12
por joseru18
Expresiones Regulares
Programación General
joseru18 0 510 Último mensaje 17 Agosto 2005, 04:12
por joseru18
Expresiones regulares
Programación Visual Basic
chrominum 1 909 Último mensaje 30 Enero 2008, 23:09
por LeandroA
¿Expresiones Regulares?
Programación General
Choclito 2 2,028 Último mensaje 4 Marzo 2010, 21:59
por BEATMASTER
Expresiones Regulares + Php wtf!
PHP
Shell Root 4 2,368 Último mensaje 29 Marzo 2010, 01:24
por Castg!
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines