Jump to content

Regex para criar mask input de numeros decimais


I-NOZex
 Share

Recommended Posts

Em seguimento a outro topico, precisava de ajuda a criar um regex para uma mascara de formatação para o plugin http://digitalbush.com/projects/masked-input-plugin/

tal mascara, tem de permitir valores como o seguinte exemplo:

1.0

5.23

11.4

11.99

230.00

o valor obrigatorio a preencher terá de ser o 1º numero antes da ponto, bem como o 1º após a ponto(caso nao seja possivel, ambos digitos apos o ponto)

Obrigado

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net
Link to comment
Share on other sites

sim, o problema é que o regex tem de ser para um unico caractere, funciona como "placeholder", assim numa definição meia leiga

funciona como nesta resposta aqui http://stackoverflow.com/a/4788800/1869192

saberias-me indicar um pequeno snippet jquery que fizesse igual aqui: http://plentz.github.io/jquery-maskmoney/

por defeito o placeholder tá 0.00, mas se escrever 11.11 por exemplo, ele vai incrementando o "valor" disponivel nas unidades...

não queria tar a incluir um plugin para usar so naquele sitio...

ou entao, em ultimo caso, um plugin que resolva aquele problema das horas, bem como aqui com os nr decimais...

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net
Link to comment
Share on other sites

sim, fica em float

isto é meramente para guiar o utilizador...

não é uma questao de validação, isso ja tá feito, é uma questão de formatação meramente...

mas obrigado pela a ajuda 🙂

já agora, sabes indicar algo para entender REGEX? é que apesar de volta e meia ter de usar, nao sei como criar, maior parte das vezes vou ao regexlib... mas gostava de entender...

Edited by I-NOZex

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net
Link to comment
Share on other sites

Uma outra questao no mesmo tema pelo qual nem acho necessario abrir novo topico

tenho inputs com o attr name no formato Music[links][0] Music[links][1] e por ai

precisava de um regex para obter o numero... achas que podes ajudar?

tenho um, que nao funciona para um .match em jquery, mas funciona para .replace mas acho que nao está totamente correto, pois se por exemplo (o que nao será o caso) eu tivesse Music[links][1][2] ele faz "match"...

/(\[\d+\])(\[(\d)\]){0,1}.*/

obrigado bioshock

edit: meti-me a inventar, e este ja funciona para o tal match e retorna um objeto, que na 2a posiçao (index1) tem o numero sem os [ ]

mas duvido que teja correto, se me puderes corrigir nisto, e se pudesses indicar algo que ensine como criar regex, ficava muito grato 😄

/\[(\d+)\]/
Edited by I-NOZex

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net
Link to comment
Share on other sites

já agora, sabes indicar algo para entender REGEX? é que apesar de volta e meia ter de usar, nao sei como criar, maior parte das vezes vou ao regexlib...

O site que eu utilizo é este: http://regex101.com/

Consoante o que escreves no Regex ele ajuda-te a perceber os passos.

formato Music[links][0] Music[links][1] e por ai

precisava de um regex para obter o numero... achas que podes ajudar?

Vê se vai de encontro ao que pretendes.

^.*?\[[^\d]*(\d+)[^\d]*\].*$

Testa no site que te indiquei.

Neste caso em específico, talvez o melhor até nem fosse regex mas sim split da informação por brackets, porque podes ter vários números.

Link to comment
Share on other sites

Percebes os básicos?

^ => Início da linha
.*? => Encontra qualquer texto EXCEPTO novas linhas
\[ => Significa que deve encontrar o primeiro caractér começado por '['
\d => Encontra dígitos apenas de 0 a 9
\d+ => Encontra dígitos de 0 a 9 MAS uma ou mais vezes
\] => Encontra o caractér mais próximo ']'
$ => Fim da linha

No teu regex não incutes um limite, pelo que ele vai buscar todos os brackets. Para além do mais, dizes-lhe '{0,1}', basicamente estás-lhe a dizer que só pode ter no máximo 1 casa, o que está errado..(a menos que assim o queiras), mas para isso podes substitui por: \d.

Enquanto escrevo este tópico e, olhando melhor para o meu regex, de facto está muito grande para o que se pretende. Uma solução mais clean http://regex101.com/r/rZ9kM5

Se tentarmos adaptar o teu regex, incutindo-lhe limites, ficará muito mais leve:

^.*?\[([0-9]{0,1})].*$

É válido para apenas 1 (uma) casa de 0 a 9.

Portanto, tendo o seguinte input: Música[15][0][2]

> 15 => Não válido

> 0 => Válido => ele apanha este valor

^.*?\[([0-9]{0,2})].*$

> 15 => Válido => ele apanha este valor

Outra coisa que deves ter em atenção, é que isto [0-9]{0,2} é diferente disto ([0-9]{0,2}). Basicamente, formas um grupo com os parêntesis curvos e dizes-lhe que ambos se devem complementar.

Por fim, .*$ significa que ele deve parar assim que encontrar o que deseja. Portanto, se optares por apenas colocar $ ele vai percorrer toda a string e fixar-se no último elemento.

Exemplo prático:

Música[15][0][2]

^.*?\[(\d+)].*$

=> 15 => Stop => output 15

^.*?\[(\d+)]$
=> 15 ...
=> 0 ...
=> 2 => Stop => output 2

EDIT: Quando se clica no link acima, ele coloca um "." à frente do URL, pelo que o link fica inoperacional..elimina esse "." no final do URL e já vês o regex clean.

Edited by bioshock
Link to comment
Share on other sites

muito obrigado pela explicaçao! confesso que mal sabia os basicos, mas com o que explicaste ja fiquei a entender muito melhor!

Obrigado pelo tempo que perdeste a explicar-me, foi-me util!

e heide rever o topico quando tiver mais tempo, que agora foi ler mais por alto, mas vou analizar depois tudo que falaste, mas desde ja, obrigado!

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.