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
If Not RegExp.
Match(WebTxt_Email.
Text,
"(?i)\b[a-z0-9._%\-]+@[a-z0-9._%\-]+\.[A-Z]{2,4}\b") Then WFrmMensajesX.MostrarMensajes("ERR", "Formato de email incorrecto")
WebTxt_Email.SetFocus()
Pero me marca un error en la compilación: "
carácter de constante de cadena incorrecto..."
![[Imagen: qgLfYlH.png]](https://i.imgur.com/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
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
If Validate
(TextBox2.
Text) Then Label2.Text = "Ok"
Label2.Text = "Error"
bValid
= RegExp.
Match(sOriginal,
"(?xim)^(?=.*\\.[A-Z]+$)(?=([[:alnum:]\\.+-]+)@(?1))(?!.*@.*@)(?!.*?@.*\\.\\d+$)(?!([[:punct:]]))(?!.*\\.{2,})(?!.*(?2)@)(?!.*@(?2)).*")
Hola tincho.

Tu cadena funciona muy bien:
"(?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.