Ir para conteúdo
Fórum Script Brasil
  • 0

Expressões regulares


neo_soro

Pergunta

Boa tarde,

estou com uma dúvida que acredito ser besta, mas estou inciando em RegExp no PHP e me aconteceu um caso que está me deixando em dúvida espero que possam me ajudar. Por exemplo:

public function validaMatricula($_mat){
    if(ereg("[A-Z]+[a-z]", "$_mat")){
        print "&lt;script>alert('A Matricula deve conter somente números');</script>";        
    }else{
        return $_mat;    
    }
}

Ele vai verificar se há algum caracter Alfabético na string, porém gostaria também de verificar os caracteres com acento. Utilizei a classe POSIX [:alpha:] , [:lower:] , [:upper:]. Porém nenhuma delas retorna nada! Por incrível que pareça. Usando tanto a função ereg(), como eregi() não estou recebendo o resultado correto, ou melhor não recebo nada quando uso as classes POSIX. Se alguém puder me explicar um pouco melhor o funcionamento dessa classe para o PHP ficaria agradecido.

E só pra finalizar: no caso da função ereg() ela vai verificar os caracteres de acordo com o intervalo ou "expressão" ("case sensitive") da expressão? Por exemplo ereg("[A-Z]") só maiúsculas, ereg("[a-z]") só minúsculas. Já o eregi() vai verficar independente do caso ("case insensitive")?

Obrigado, Rodrigo César

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
porém gostaria também de verificar os caracteres com acento

não seria melhor remover os acentos?

Não, pois a verificação é justamente para saber se há acentos nas strings. É tipo uma classe de validação, então a intenção dela é verificar quando o usuário digita um caracter errado, o que implica em erros de digitação, inclusive os com acento. Agora, sei que poderia também fazer um script em JavaScript para substituir, ou até mesmo retirar os acentos e tals, porém esabarro novamente na mesma situação: Gostaria de validar utilizando Expressões Regulares, o que no caso não está dando certo, pelo menos no PHP quando uso a classe POSIX [:alpha:]. Mas eu queria fazer em PHP mesmo pra ir aprendendo, saca? Mas de qualquer forma valeu... Alguém poderia me auxiliar?

Obrigado, Rodrigo César

Link para o comentário
Compartilhar em outros sites

  • 0
deixa eu ver se entendi...

você quer verificar se há acentos na string, é isso?

tenta assim...

ereg("[A-Z-ÁÉÍÓÚ]+[a-z-áéíóú]", "$_mat")

veja se funciona...

Cassiano obrigado pela sua atenção, mas ainda não é isso que eu quero. Eu sei que pode ser feito dessa forma, mas gostaria de poder usar as classes POSIX que existem, por exemplo: [:alpha:] todos as letras maiúsculas e minúsculas, incluindo os acentos. [:upper:] letras maiúsculas e com acentos somente, etc. Isso poupa muito trabalho e auxilia na formulação de expressões mais complexas. Mas de qualquer forma obrigado pela atenção gasta. O que eu queria saber era porque as classes POSIX não estão funcionando direito no PHP. É sintaxe??? Burrice da minha parte???

Obrigado, Rodrigo César

Link para o comentário
Compartilhar em outros sites

  • 0

olha, fiz um teste aqui...

$string = "abc";

if(ereg("^[[:alpha:]]{3}$", $string)) {
    echo "certo";
}
else {
    echo "errado";
}
nesse caso a $string está certa... agora se fizer assim...
$string = "ábc";

if(ereg("^[[:alpha:]]{3}$", $string)) {
    echo "certo";
}
else {
    echo "errado";
}

a $string ta errada...

acho que essas classes são para caracteres sem acentos....

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,6k
×
×
  • Criar Novo...