New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Regex quantificadores com problemas! #47
Comments
Usar a mascara "A{4,16}" não resolve? |
Infelizmente não funciona caro amigo...
|
Vamos por lá... você está tentando fazer muitas coisas que o plugin ainda não suporta. Ele suporta expressões simples de regex e não toda a stack de possibilidades de uma expressão regular. {4} - Não é suportado. Você tentou se explicar mais acho que é mais fácil você dizer o que você quer como resultado final do que explicar tudo o que você tentou fazer rs. Você quer que os 4 primeiros digitos sejam numeros e os 12 seguintes sejam letras minusculas, é isso? |
Hehehehe eu coloquei tanta coisa que verifiquei no plugin que devo dificultado ver minha dificuldade inicial... O que eu queria, era realmente ter um campo Alfanumérico de 4 a 20 caracteres. Quer dizer, eu apenas tentei de uma forma, de outra forma, e outra forma, e acabei detectando essas falhas em entender o quantificador regex. Assim como eu tinha comentado:
Porém no terceiro item dessa marcação "{1,n}", esqueci de acrescentar que: se "n" for maior que 9, ou seja, conter 2 algarismos, ele também se perde. |
Ah! Mas A{4,20} deveria funcionar perfeitamente, deve ser um bug, vou investigar isso hoje e já corrijo. Sorry! |
@pyetrosafe vi que era simples de resolver, atualiza para versão v0.11.5 e veja se resolve seu problema. A mascara A{4,20} deve funcionar agora. |
Hehehehehe Firmeza xD |
Ah ok... vou atualizar ;D De qualquer forma, da uma olhada nos outros pontos desse tópico ^^
Testado, funcionando perfeitamente:
Menos estes:
|
Não tenho previsão de fazer funcionar estes outros 2 pontos @pyetrosafe. Se os usuários começarem a pedir eu volto a revisar este assunto. |
Ok... ;) E estes casos ? Exibir os caracteres "{}" automaticamente, tem uma maneira específica que não conheço?
E esses últimos:
|
@pyetrosafe eu foco na entrega de features, casos de uso, eu não posso sair programando para o plugin sair atendendo todas as possibilidades por mais malucas que elas sejam. Meu objetivo não é fazer com que o usuário possa colocar qualquer coisa que o plugin vai se virar e entender. Aonde tiver utilidade eu vou agir. Se você me disser que existe uma mascara em que estes pontos seriam úteis e que com o que tem o plugin hoje não é possível fazer eu ataco o problema, sacou? Caso contrário fica difícil ;) |
Se você quiser usar o caracter { e } como caracteres de mascara, você precisa escapa-lo corretamente pois { é um caracter reservado de regex então você precisa fazer desta forma {'{': '{'}. Da mesma forma que foi feito com o parenteses: '(': '(', |
A opção de placeholder já foi sugerida por outro usuário, porém, o html 5 já oferece o atributo placeholder="" que da conta do recado, certo? A sacada do onBlur já está sendo pensada também. |
Saquei velho... Parabéns amigo... mt bom o plugin e a sua atenção em visualizar o comentário da galera!!! |
Olá igor.
Achei seu plugin jquery Mask, achei muito bom, melhor doque o que eu usava antes, maskedinput.
Gostaria de dar algumas sugestões quanto ao meu uso dele, e talvez algumas coisas sejam apenas falta de conhecimento do plugin ^^ !!!
Bom primeiramente, estava procurando um mask para um campo senha para limitar caracteres inválidos e definir comprimento também. A boa é que não preencheu toda mascará com caracteres especiais (como no maskedinput o 'placeholder'), pois se tratando de um campo senha, seria estranho.
Vamos lá, Senti certa dificuldade em definir a mascara pelo tamanho opicional de 4 a 20 caracteres.
Primeiramente tentei isso:
$('input[type=password]').mask('A{4,4}A{0,16}');
Por regex deveria conter os 4 primeiros e poder conter outros 16 caracteres. Mas ao digitar aceita apenas 6 caracteres. Parece que no segundo regex ele conta mais 1 caractere "{0" e mais um caractere ",1" e ignora o "6}" para a mascara toda, ou seja, os 4 primeiros mais 2.
Solucionei parcialmente usando:
$('input[type=password]').mask('A{4,4}A{0,7}A{0,7}');
Nesse caso tive que usar "A{0,7}" duas vezes. Como antes, ele contou depois dos 4 primeiros, mais 8 caracteres e mais 8 caracteres, sendo então 4 + 8 + 8 = 20, sendo que nessa regra escrita deveria ser 4 + 7 + 7.
Verificando melhor vi que algumas regras não seguem como deveriam, veja exemplo:
.mask('9{4,4}S{0,4}');
Casa com: "1234abcde", mas deveria casar só com: "1234abcd".
.mask('9{4}S{0,4}');
Não casa com: "1234abcd" como deveria, mas casa com: "12abcde". Não reconheceu "{4}" como expressão regular, mas sim "{" e "}" caractere mascara (?) e "4" como um único numero.
.mask('9{4,4}S{0,4}');
Como no exemplo de cima a mascara não entendeu que era regex na primeira regra, então tentei escapar o regex usando "" mas continuou como no primeiro exemplo. O resultado foi "1234abcde".
.mask('9{4}S{0,4}');
Assim como no exemplo de cima o uso do escape "" não funcionou (foi só um teste meu a fim de explorar o plugin). O resultado foi o mesmo da mask "9{4}S{0,4}" e nos dois casos os caracteres "{" e "}" não são impressos, já que estes não foram entendidos como regex.
Mesmo usando a opção maskChars, nenhuma tentativa ('{': '{', '{': '{', '{': '{', '{': '{') faz o plugin entender "{" como caractere mascará (imprimir o caractere) invés de regex. Para isso foi necessário usar o translation ('b': '{', 'i': '}'), mas dessa forma os caracteres "{" e "}" devem ser digitados e não é colocado automáticamente.
Ainda nesse ponto do regex, quando o uso do quantificador "{,}" temos o seguinte:
"{n}": não entende como regex mas também não imprime as "chaves" ("{" e "}") como caractere mascara;
"{0,n}": usa da soma de 1 caractere "0" com o valor de "n". Ex: "{0,4}" aceita 5 caracteres;
"{1,n}": aqui, diferente do exemplo anterior funciona corretamente, aceita 1 ou n caracateres;
"{n,}": não entende a regra, ao menos "n" ou mais. Aqui imprime o caractere 2x (independente do valor de n) e não imprime mais nada depois disso;
Tentando usar o Translation com regex:
Ao aplicar uma tentativa de regex com o translation tive outro problema:
.mask('9S', {translation: {9: '[0-9]+'}});
Nesse caso seria correto de acordo com a regra aceitar quantos números fossem, seguidos de uma letra, mas o que ocorre é aceitar 1 número e 1 letra ou 2 números;
.mask('9S', {translation: {9: '[0-9]*'}});
O mesmo problema que o exemplo acima, porém casa corretamente com "a";
Bom, é isso que eu verifiquei até agora caro Igor.
Ah outra coisa interessante, seria por a opção de ter o placeholder com true ou false nas opções, com default: false.
Ah, também senti falta da função onBlur, nas options do plugin, tendo que criar um script por fora. Aqui eu usaria pra verificar o valor quando onComplete não fosse chamado.
De qualquer forma seu plugin me ajudou em 2 páginas funcionando muito melhor que o maskedinput em uma delas (mascarar notas de provas, até deixando o código bem menor) e funcionou com esse pequeno problema no caso do password, sendo que o outro plugin nem funcionou!
Aguardo ancioso seu retorno e uma nova versão corrigida para testar.
Abraço... Pyetro Sabaraense F. da Costa (http://www.pysafe.blogspot.com.br, www.pbcalc.portalsh.com.br - portalsh em construção).
The text was updated successfully, but these errors were encountered: