Qual é a expressão regular de um decimal com uma precisão de 2?
Exemplos válidos :
123.12
2
56754
92929292929292.12
0.21
3.1
Exemplos inválidos:
12.1232
2.23332
e666.76
O ponto decimal pode ser opcional e números inteiros também podem ser incluídos.
Respostas:
Os tokens de regex válidos variam de acordo com a implementação. Um formulário genérico é:
Mais compacto:
Ambos assumem que ambos têm pelo menos um dígito antes e um após a casa decimal.
Para exigir que a cadeia inteira seja um número desse formulário, envolva a expressão nas tags de início e fim, como (no formulário do Perl):
Para corresponder números sem um dígito à esquerda antes do decimal (
.12
) e números inteiros com um ponto final (12.
), excluindo a entrada de um único ponto (.
), tente o seguinte:Adicionado
Enrole a parte fracionária
()?
para torná-la opcional. Esteja ciente de que isso exclui formulários como12.
Incluir que seriam mais parecidos^\d+\\.?\d{0,2}$
.Adicionado
Use
^\d{1,6}(\.\d{1,2})?$
para interromper a repetição e restringir a parte inteira do valor decimal.fonte
-?
, como em-?\d+(\.\d{1,2})?
. Não incluí negativos ou comecei com um ponto decimal, pois eles não estavam na pergunta do OP, embora certamente sejam válidos para um formato numérico mais genérico. O tópico de comentários aqui fornece algumas maneiras de lidar com ".21".E como as expressões regulares são horríveis de ler, muito menos entender, aqui está o equivalente detalhado:
Você pode substituir
[0-9]
com\d
na maioria das implementações de expressões regulares (incluindo PCRE , o mais comum). Deixei como[0-9]
acho mais fácil de ler.Além disso, aqui está o script Python simples que eu usei para verificá-lo:
fonte
+
após o primeiro parêntese de fechamento,^([0-9]{0,3})(\.[0-9]{1,2})?$
\\.
vez de,\.
porque.
parece que funciona, mas corresponde a qualquer caractere (não apenas à casa decimal). Por exemplo, tanto1z23
e1.23
pode ser considerada válida se você não escapar delaPara incluir um sinal de menos opcional e não permitir números como
015
(que podem ser confundidos com números octais), escreva:fonte
Para números que não possuem separador de milhares, eu gosto desse regex simples e compacto:
ou, para não se limitar a uma precisão de 2:
O último corresponde a
1
100
100.
100,74
100,7
0,7
.7
0,72
E não corresponde a uma string vazia (como \ d *.? \ D * faria)
fonte
Eu uso este para até duas casas decimais:
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$)
passa:0,25
0,25
10,25
0,25
não passa:
-.25
01.25
1.
1.256
fonte
Vai fazer coisas como
12.
aceitas. Não é isso que é comumente aceito, mas se você precisar ser "flexível", esse é um caminho a percorrer. E, claro,[0-9]
pode ser substituído por\d
, mas acho que é mais legível dessa maneira.fonte
Tente isto
Permitirá também sinais positivos e negativos.
fonte
A resposta principal está ERRADA porque valida
5.
ou5,
insereeste código lida com isso (mas no meu exemplo, números negativos são proibidos):
os resultados são abaixo:
fonte
fonte
Em geral, ou seja, casas decimais ilimitadas:
^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$
.fonte
Você não terá que tomar a
e
eme666.76
em conta?Com
fonte
adicionando minha resposta também, alguém pode achar útil ou pode estar correto também.
fonte
Isso funcionou comigo:
O grupo 1 é o número do seu float e o grupo 2 é apenas a fração.
fonte
Eu tentei um com o meu projeto. Isso permite números com
+ | -
sinais também.fonte
O Chrome 56 não está aceitando esse tipo de padrão (o Chrome 56 está aceitando o 11.11. Um adicional.) Com o número do tipo, use o tipo como texto como progresso.
fonte
Isso permitirá decimal com exponenciação e até 2 dígitos,
Demo
fonte
1.2e-10
([0-9]+)?
está melhor escrito\d*
. Agora não combina10e3
. E o OP quer corresponder até 2 dígitos.A função validará qualquer número decimal que o número do tempo tenha casas decimais ou não; será exibido "Número certo", caso contrário, "Digite apenas números na caixa de texto do valor". a mensagem de alerta será exibida.
Obrigado... :)
fonte