Comunidad Gambas-es

Versión completa: RegExp para validar Email
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola a todos.

Gambas 3.17.2
Componente: gb.pcre
Clase: RegExp

En la ayuda del componente gb.pcre, clase RegExp colocan un ejemplo de expresión regular para validar los formatos de email:

(?i)\b[a-z0-9._%\-]+@[a-z0-9._%\-]+\.[A-Z]{2,4}\b

Con la expresión regular anterior, estoy intentando validar el texto de un objeto WebTextBox asi:
GAMBAS
  1.    If Not RegExp.Match(WebTxt_Email.Text, "(?i)\b[a-z0-9._%\-]+@[a-z0-9._%\-]+\.[A-Z]{2,4}\b") Then
  2.      WFrmMensajesX.MostrarMensajes("ERR", "Formato de email incorrecto")
  3.      WebTxt_Email.SetFocus()
  4.      Return True
  5.    Endif


Pero me marca un error en la compilación: "carácter de constante de cadena incorrecto..."

[Imagen: qgLfYlH.png]
¿Podrían, decirme cual es la forma correcta de colocar la cadena?

Gracias por las posibles respuestas.
Hello omoreno

Mira te voy a dar tres enlaces que me parece que te serán de buena ayuda. Yo de momento no puedo darte respuesta ya que estoy igual que tu.

https://cursogambas.blogspot.com/2015/04...ambas.html
http://gambaswiki.org/wiki/doc/pcre
https://regexr.com/

Saludos Smile

Nota: Quizás si guardas la expresión en una variable String a lo mejor funciona. Digo yo.
Nota2: He testeado la expresión y funciona perfectamente con una dirección de e-mail, aunque lo he comprobado en el último enlace que te he dado, por lo tanto esa expresión esta del todo bien, debes buscar el problema en Gambas.
Puede probar este codigo , pueda que le sirva de ayuda .
Código:
Dim reg As New RegExp
Dim Regex_String As String = "^[_a-z0-9-]+(.[a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$"
TextLabel2.Text = "Analizando"
Wait 0.5
TextLabel2.Text = ""

If (reg.Match(Trim(txt_Data.Text), Regex_String)) Then
    TextLabel2.Text = "correcto"
  Else
    TextLabel2.Text = "fallo"
Endif
(27-04-2022, 01:58)HenryGuzman escribió: [ -> ]Puede probar este codigo , pueda que le sirva de ayuda .
Código:
Dim reg As New RegExp
Dim Regex_String As String = "^[_a-z0-9-]+(.[a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$"
TextLabel2.Text = "Analizando"
Wait 0.5
TextLabel2.Text = ""

If (reg.Match(Trim(txt_Data.Text), Regex_String)) Then
    TextLabel2.Text = "correcto"
  Else
    TextLabel2.Text = "fallo"
Endif

Hola HenryGuzman.

Funciona mucho mejor que el que tengo: "(\\S+@\\S+)", aunque no valida el tipo de dominio.

Las pruebas:
  • Nombre de usuario: Validado SI:      omoreno@ciaxyz.com 
  • @: Validado SI:                                 omoreno@ciaxyz.com
  • Dominio Organización: Validado SI:  omoreno@ciaxyz.com
  • Dominio Tipo: Validado NO:              omoreno@ciaxyz.com
Gracias por tu código.
Hola Omoreno,
Hice este ejemplo que tal vez te sirva.
GAMBAS
  1. Public Sub Button1_Click()
  2.  
  3.   If Validate(TextBox2.Text) Then
  4.     Label2.Text = "Ok"
  5.   Else
  6.     Label2.Text = "Error"
  7.  
  8.  
  9. Private Function Validate(sOriginal As String) As Boolean
  10.  
  11.   Dim bValid As Boolean
  12.  
  13.   bValid = RegExp.Match(sOriginal, "(?xim)^(?=.*\\.[A-Z]+$)(?=([[:alnum:]\\.+-]+)@(?1))(?!.*@.*@)(?!.*?@.*\\.\\d+$)(?!([[:punct:]]))(?!.*\\.{2,})(?!.*(?2)@)(?!.*@(?2)).*")
  14.  
  15.   Return bValid
  16.  


Hola tincho.

Cool  Tu cadena funciona muy bien: Cool

"(?xim)^(?=.*\\.[A-Z]+$)(?=([[:alnum:]\\.+-]+)@(?1))(?!.*@.*@)(?!.*?@.*\\.\\d+$)(?!([[:punct:]]))(?!.*\\.{2,})(?!.*(?2)@)(?!.*@(?2)).*"

Las pruebas:
  • Nombre de usuario: Validado SI:       omoreno@ciaxyz.com 
  • @: Validado SI:                                  omoreno@ciaxyz.com
  • Dominio Organización: Validado SI:  omoreno@ciaxyz.com
  • Dominio Tipo: Validado SI:                omoreno@ciaxyz.com
Gracias por tu código.