Máscara não completa

Pretendo inserir no meu formulário um campo com a seguinte máscara:

999999999/99.9.99999

Mas os valores a colocar podem não completar a máscara.
Valores possíveis:

12345/12.5.123
12/1.2.34578
123/32.7.3

Qual a melhor solução? criar 5 campos, um para cada parte do número? Mas depois os campos ficam afastados uns dos outros!!!

Cpmts

Nestes casos so um javascript bem feito resolve, essa máscara é muito específica, o algoritmo vai ter que levar em conta todas as possibilidades.

Vou investigar

Você pode fazer o controle no evento,

cria um campo texto ou label faz as verificações e atribui a mascara.

if bla bla bla {
{campo_novo} = “12345/12.5.123”;
} else {
{campo_novo} = “12/1.2.34578”;
}

99999/99.9.999;99/9.9.99999;999/99.9.9

Assim não funciona?

Testei aqui com esses valores que vc passou e funcionou normalmente.

12345/12.5.123 11 campos
12/1.2.34578 9 campos
123/32.7.3 7 campos

São só esses 3 tipos de mascara?

Não, pode ser mais tipos de máscara (qualquer quantidade de caracteres) dentro da máscara.
parte 1: mínimo 1 máximo 9
parte 2: mínimo 1 máximo 2
parte 3: mínimo 1 máximo 1
parte 4: mínimo 1 máximo 5

Para não perder mais tempo, por agora retirei a máscara e obrigo os utilizadores a digitarem a barra inclinada e os pontos.

Thanks

dgidgio,

Vamos tentar uma solução Tabajara… mas antes me informe qual o tipo de campo e tamanho no seu DB.

T+

Tipo Varchar
Tamanho 17

nesse casos, eu insiro a mascara manualmente, no evento ajax onfocus retiro a mascara, e no onblur insiro a mascara, na onload tb insiro a mascara, e na onbefore(insert/update) retiro a mascara, para facilitar, costumo criar um método php e só passo o campo e uma flag(Retira/Insere mascara) como parâmetros e retorno o resultado e guardo no mesmo campo.

Não sei se é a melhor forma de fazer mas, devido a existir uma quantidade de caracteres variável nas 4 partes do valor, penso que a solução passa pelo utilizador digitar o valor sempre separando as partes com um caractere especial, por exemplo 1 ponto.

Então fiz assim:

O utilizador digita o valor separando as partes com ponto final (o 1º separador também porque é mais rápido do que colocar logo a barra):
(nota: falta fazer a validação do valor digitado -> 3 pontos obrigatórios e verificar os limites máximos de caracteres das partes do valor)

1234.34.2.567

No evento onChange coloco:

$codigo = {codigo};
$partes = explode(".", $codigo);
$codigo_novo = $partes[0] . “/” .
$partes[1] . “.” .
$partes[2] . “.” .
$partes[3];

{codigo} = $codigo_novo;

e fica:

1234/34.2.567

Outros valores:

123456.45.7.56789 -> 123456/45.7.56789
34.45.6.6 -> 34/45.6.6

O armazenamento na BD incluirá também os caracteres separadores das partes.

Não vejo outra forma de fazer, devido ao facto das partes do valor serem variáveis.
Só se fosse implementado no Scriptcase 1 tipo de campo ‘multipartes’ :slight_smile:
ou uma máscara que permitisse passar com as teclas de direcção entre as posições do valor!!!

Obrigado

Não tem uma regra para a quantidade de dígitos? pois da forma que descreve, não dá para adivinhar qual a mascara aplicar.

Pois é…

Eu já ensaiei umas cinco soluções tabajaras, mas não consigo entender a lógica… imagine o SC… porque sem lógica fica difícil…

T+

Ok

Exacto não tem uma máscara fixa.
A máscara é variável conforme indiquei:

parte 1 do campo: caracteres: mínimo 1 máximo 9
parte 2 do campo: caracteres: mínimo 1 máximo 2
parte 3 do campo: caracteres: mínimo 1 máximo 1
parte 4 do campo: caracteres: mínimo 1 máximo 5

Obrigado

Não sei se vc precisa que isso fique tudo em um campo apenas. Mas eu faria quatro campos e na hora de gravar na tabela colocaria no formato desejado.

Cleyton,
Era exactamente dessa forma que eu fazia nestes casos em c# .net

campo1 / campo2 . campo3 . campo4

No scriptcase só não faço porque os 4 campos que compõem o valor ficam distantes uns dos outros (cada um em sua coluna).

campo1 campo2 campo3 campo4

Ou existe alguma forma de aproximar os campos para ficarem perto uns dos outros?

Cria um bloco só para esse campo e vai testando o css do titulo que vai dar certo. Ou mais ou menos certo. rsrsrs

Tabajara Solution… crie um bloco com os quatro campos deixe sem label e coloque no modo corrido… faz esse teste…

sendo os 4 campos num campo só, como saber quantos dígitos tem um campo ou outro? Sem um delimitador dos campos não dá para saber qual mascara aplicar.

Quer os campos juntos? talvez criando os 4 campos, escondendo os mesmos, alterando seus names e ids via jquery, e os criando manualmente dentro de uma div, é possível colar os campos.

Podem ser 4 campos desde que fiquem juntos assim:

Valor |__| / || . |___| . |______|

e não assim:

Valor |__| / || . |___| . |______|

Que é o que acontece utilizando blocos.

Ainda não testei conforme o jovitomelo diz (modo corrido).

o modo corrido ainda vai manter um pouco afastado, pois o sc coloca cada campo dentro de uma celula numa tabela.