none
Ajuda com regular expression RRS feed

  • Pergunta

  • Pessoal to precisando de uma regular expression que aceite caracteres alfanuméricos incluindo espaço - e _ que limite os caracteres de 3 a 15 caracteres E que OBRIGATORIAMENTE tenha pelo menos 1 letra. Eu consegui bolar isso aqui:

    [a-zA-Z0-9_\s\-]{3,15}$


    ainda falta a parte de obrigatoriamente ter pelo menos 1 letra =(
    poderiam me ajudar?
    sábado, 21 de novembro de 2009 23:17

Respostas

  • Para forçar a existência de pelo menos uma letra é simples:

    [a-zA-Z_0-9\s_-]*[a-zA-Z][a-zA-Z_0-9\s_-]*

    O problema é juntar essa restrição com o número de caracteres. Para tanto você pode usar algo não muito trívial em regex: Positive lookahead assertion .

    ^(?=[a-zA-Z_0-9\s_-]*[a-zA-Z][a-zA-Z_0-9\s_-]*).{3,15}$

    Basicamente você está dizendo que você procura uma cadeia de 3 a 15 caracteres que siga o padrão definido dentro do grupo (?=...). Pode ser um pouco complexo e recomendo que você entenda bem o conceito antes de aplicar. Em todo caso a idéia de validar o tamanho da string de outra maneira e deixar a expressão se encarregar só da restrição de tipos de caracteres e a exigência de uma letra deixaria o código mais simples e claro.
    • Sugerido como Resposta LeandrodeMelloFagundes segunda-feira, 23 de novembro de 2009 16:51
    • Marcado como Resposta Titicolaz segunda-feira, 23 de novembro de 2009 18:55
    segunda-feira, 23 de novembro de 2009 15:24
  • Titi, estamos com o conceito errado.

    Pq você não verifica o length antes? pegue a string, veja se é maior de 3 ou menor que 13. estamos dificultando nosso trabalho.
    depois disso é só verificar se cumpre os outros requisitos?
    De qualquer forma, vou deixar aqui um regex que deve cumpri o que você deseja!
    apesar de pouco prático, vai funcionar.
    abraços!

    :)


    [A-Za-z]{3,13}|[A-Za-z]{1}[\w\s\x2D\x5F]{2,12}|[0-9\s\x2D\x5F]{1}[A-Za-z]{1}[\w\s\x2D\x5F]{1,11}|[0-9\s\x2D\x5F]{2}[A-Za-z]{1}[\w\s\x2D\x5F]{0,10}|[0-9\s\x2D\x5F]{3}[A-Za-z]{1}[\w\s\x2D\x5F]{0,9}|[0-9\s\x2D\x5F]{4}[A-Za-z]{1}[\w\s\x2D\x5F]{0,8}|[0-9\s\x2D\x5F]{5}[A-Za-z]{1}[\w\s\x2D\x5F]{0,7}|[0-9\s\x2D\x5F]{6}[A-Za-z]{1}[\w\s\x2D\x5F]{0,6}|[0-9\s\x2D\x5F]{7}[A-Za-z]{1}[\w\s\x2D\x5F]{0,5}|[0-9\s\x2D\x5F]{8}[A-Za-z]{1}[\w\s\x2D\x5F]{0,4}|[0-9\s\x2D\x5F]{9}[A-Za-z]{1}[\w\s\x2D\x5F]{0,3}|[0-9\s\x2D\x5F]{10}[A-Za-z]{1}[\w\s\x2D\x5F]{0,2}|[0-9\s\x2D\x5F]{11}[A-Za-z]{1}[\w\s\x2D\x5F]{0,1}|[0-9\s\x2D\x5F]{12}[A-Za-z]{1}
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
    • Sugerido como Resposta LeandrodeMelloFagundes segunda-feira, 23 de novembro de 2009 13:42
    • Marcado como Resposta Titicolaz segunda-feira, 23 de novembro de 2009 18:55
    segunda-feira, 23 de novembro de 2009 13:42

Todas as Respostas

  • Titicolaz,
    só para entender a letra pode estar em qq lugar, certo?
    confesso que é um baita desafio, mas vamos lá. vou tentar algumas coisas e qq coisa posto aqui!

    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
    segunda-feira, 23 de novembro de 2009 10:47
  • Sim, pode estar em qualquer lugar.
    Isso ai é pra validação de logins! =)
    Desenvolvedor .NET Empresa: WX7 Solutions LIVE GamerTag: Thiticolax 360
    segunda-feira, 23 de novembro de 2009 11:06
  • Ok, estou testando algumas coisas! :) vamos tentar hehe

    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
    segunda-feira, 23 de novembro de 2009 11:34
  • Titi,

    não consigo de jeito nenhum um método quando a letra estiver no meio. Um método "prático" pelo menos, não! O que me preocupa hehe
    teria que testar os caracteres 1 a 1. da pra fazer, tudo é possível hehe
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
    segunda-feira, 23 de novembro de 2009 12:58
  • Titi, estamos com o conceito errado.

    Pq você não verifica o length antes? pegue a string, veja se é maior de 3 ou menor que 13. estamos dificultando nosso trabalho.
    depois disso é só verificar se cumpre os outros requisitos?
    De qualquer forma, vou deixar aqui um regex que deve cumpri o que você deseja!
    apesar de pouco prático, vai funcionar.
    abraços!

    :)


    [A-Za-z]{3,13}|[A-Za-z]{1}[\w\s\x2D\x5F]{2,12}|[0-9\s\x2D\x5F]{1}[A-Za-z]{1}[\w\s\x2D\x5F]{1,11}|[0-9\s\x2D\x5F]{2}[A-Za-z]{1}[\w\s\x2D\x5F]{0,10}|[0-9\s\x2D\x5F]{3}[A-Za-z]{1}[\w\s\x2D\x5F]{0,9}|[0-9\s\x2D\x5F]{4}[A-Za-z]{1}[\w\s\x2D\x5F]{0,8}|[0-9\s\x2D\x5F]{5}[A-Za-z]{1}[\w\s\x2D\x5F]{0,7}|[0-9\s\x2D\x5F]{6}[A-Za-z]{1}[\w\s\x2D\x5F]{0,6}|[0-9\s\x2D\x5F]{7}[A-Za-z]{1}[\w\s\x2D\x5F]{0,5}|[0-9\s\x2D\x5F]{8}[A-Za-z]{1}[\w\s\x2D\x5F]{0,4}|[0-9\s\x2D\x5F]{9}[A-Za-z]{1}[\w\s\x2D\x5F]{0,3}|[0-9\s\x2D\x5F]{10}[A-Za-z]{1}[\w\s\x2D\x5F]{0,2}|[0-9\s\x2D\x5F]{11}[A-Za-z]{1}[\w\s\x2D\x5F]{0,1}|[0-9\s\x2D\x5F]{12}[A-Za-z]{1}
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
    • Sugerido como Resposta LeandrodeMelloFagundes segunda-feira, 23 de novembro de 2009 13:42
    • Marcado como Resposta Titicolaz segunda-feira, 23 de novembro de 2009 18:55
    segunda-feira, 23 de novembro de 2009 13:42
  • Para forçar a existência de pelo menos uma letra é simples:

    [a-zA-Z_0-9\s_-]*[a-zA-Z][a-zA-Z_0-9\s_-]*

    O problema é juntar essa restrição com o número de caracteres. Para tanto você pode usar algo não muito trívial em regex: Positive lookahead assertion .

    ^(?=[a-zA-Z_0-9\s_-]*[a-zA-Z][a-zA-Z_0-9\s_-]*).{3,15}$

    Basicamente você está dizendo que você procura uma cadeia de 3 a 15 caracteres que siga o padrão definido dentro do grupo (?=...). Pode ser um pouco complexo e recomendo que você entenda bem o conceito antes de aplicar. Em todo caso a idéia de validar o tamanho da string de outra maneira e deixar a expressão se encarregar só da restrição de tipos de caracteres e a exigência de uma letra deixaria o código mais simples e claro.
    • Sugerido como Resposta LeandrodeMelloFagundes segunda-feira, 23 de novembro de 2009 16:51
    • Marcado como Resposta Titicolaz segunda-feira, 23 de novembro de 2009 18:55
    segunda-feira, 23 de novembro de 2009 15:24
  • Intendi... o.o
    bom eu tenho que ver isso ai tudo junto por que eu to usando aquele RegularExpression validator x)

    Então, eu tenho um exemplo aqui que consegui na regexlib.com (acho q eh esse o site) onde ele pega as mesmas regras que eu citei só que ele obriga que tenha pelo menos 1 numero e 1 letra.

    Olha só como está:

    (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,15})$

    EU pensei que fazeno assim revolveria:

    (?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,15})$

    segunda-feira, 23 de novembro de 2009 18:37
  • Titicolaz,

    recomendo que utilize uma das formas citadas acima. ambas estão preparadas para seu problema
    :)

    abraços
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler)
    segunda-feira, 23 de novembro de 2009 18:41
  • vlw pessoal, funcionou x)~

    ja marquei como resposta!!!
    Desenvolvedor .NET Empresa: WX7 Solutions LIVE GamerTag: Thiticolax 360
    segunda-feira, 23 de novembro de 2009 18:55