Ir para o conteúdo
Hélder

Validar dados com expressões regulares

Mensagens Recomendadas

Hélder

Boas, não percebo quase nada de expressões regulares então estive á procura na net uma para validar número de telemóvel portugueses(91x 92x 93x 96x

) e então achei esta:

/^(9[1236]\d{7}$/

No entanto não aceita qualquer tipo de expressão, dá sempre erro.

   Case "Telemovel"
		 'Falta melhorar esta expressão para validar o numero telemovel
		  Dim regex As String = "/^(9[1236]\d{7})$/"
		  Dim validarTelemovel As New Regex(regex)

		  If (validarTelemovel.IsMatch(Contacto)) Then
				fGetIndividuos.SaveContacto(idIndividuo, idTipoContacto, Contacto)
				rdgContacto.Rebind()
				TextBoxContacto.Text = ""
		  Else
				 Me.rajaxMan.ResponseScripts.Add("radalert('Necessário definir um número de telemóvel válido.');")
		  End If

Editado por Hélder

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hélder

Obrigado pelo dica, mas como eu tenho estado a validar tudo com regex queria continuar assim...

Cumprimentos,

Hélder

Editado por Hélder

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rezanov

tenta assim

System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(TextBox1.Text.ToString().Replace(" ", string.Empty), @"^(9[1236]\d{7}|2\d{8})?$",
System.Text.RegularExpressions.RegexOptions.IgnoreCase);

// Here we check the Match instance.
if (!match.Success)
{
   //Erro
}
else
{
   //Telemovel válido
}

PS: porque aparece RegularExp<b></b>ressions em vez de RegularExpressions, não sei )

Editado por ribeiro55

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

"Ter estar a validar tudo com regex" não é justificação suficiente para te sentires obrigado a validar tudo com expressões regulares.

Uma validação da treta como essa só tem a perder se usares expressão regular, nomeadamente a nível de performance.

Basta-te algo como um Like:

If (n Like "9[1236]#######" Or n Like "2########") And n.Length = 9 Then
   Console.Write("LIKE:OK  ")
Else
   Console.Write("LIKE:ERRADO  ")
End If

Podes consultar mais informação sobre o Like, aqui: http://wiki.portugal-a-programar.pt/dev_net:vb.net:operadorlike

Ainda assim, se quiseres optar por a expressão regular, só precisas de retirar as slashes de início e fim. De resto a expressão parece-me bem.

Dim regex As String = "^(9[1236]\d{7}|2\d{8})"

Só para reforçar, tomei a liberdade de fazer uma medição de templo simples, e eis o resultado para um número válido (menos ticks = mais rápido):

REGEX:OK TICKS:3532

LIKE :OK TICKS:198

É insignificante se fizeres uma validação. Se fizeres mais, a matemática começa a dar-te uma coça.

Eu acho que as expressões regulares são excelentes, sim para validações com várias regras, mas em alvos muito mais extensos, por exemplo, sacar todos os números Portugueses de 3423 páginas de texto.

Editado por ribeiro55

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Hélder

Obrigado pelas ajudas!

Realmente ribeiro51 tens toda a razão, vou optar antes pela tua solução.

Case "Telemovel"
 'Dim regex As String = "^(9[1236]\d{7})?$"
 'Dim validarTelemovel As New Regex(regex)
 'If (validarTelemovel.IsMatch(Contacto)) Then
   '  fGetIndividuos.SaveContacto(idIndividuo, idTipoContacto, Contacto)
 'Else
   '  Me.rajaxMan.ResponseScripts.Add("radalert('Necessário definir um número de telemóvel válido.');")
 'End If

 If (Contacto Like "9[1236]#######") And Contacto.Length = 9 Then
   fGetIndividuos.SaveContacto(idIndividuo, idTipoContacto, Contacto)
 Else
   Me.rajaxMan.ResponseScripts.Add("radalert('Necessário definir um número de telemóvel válido.');")
 End If

Cumprimentos,

Hélder

Editado por Hélder

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.