Como adicionar mais de um comando regex em um pattern html5

Tenho esses 4 regex

[0-9]{2}[.]{1}[0-9]{3}[.]{1}[0-9]{3}[-]{1}[0-9]{2}

[0-9]{1}[.]{1}[0-9]{3}[.]{1}[0-9]{3}[-]{1}[0-9]{2}

[0-9]{3}[.]{1}[0-9]{3}[-]{1}[0-9]{2}

[0-9]{2}[.]{1}[0-9]{3}[-]{1}[0-9]{2}

Queria poder adiciona-los a um mesmo pattern html5 ex:

<input type="text" pattern="[0-9]{2}[.]{1}[0-9]{3}[.]{1}[0-9]{3}[-]{1}[0-9]{2}" pattern="[0-9]{1}[.]{1}[0-9]{3}[.]{1}[0-9]{3}[-]{1}[0-9]{2}" pattern="[0-9]{3}[.]{1}[0-9]{3}[-]{1}[0-9]{2}" pattern="[0-9]{2}[.]{1}[0-9]{3}[-]{1}[0-9]{2}" maxlength="10" title="Porfavor adicione apenas nĂșmeros">

Porém quando eu tento não funciona

VocĂȘ pode utilizar o operador OR " | ", conforme exemplo abaixo:

<input type="text" pattern="([0-9]{2}[.]{1}[0-9]{3}[.]{1}[0-9]{3}[-]{1}[0-9]{2})|([0-9]{1}[.]{1}[0-9]{3}[.]{1}[0-9]{3}[-]{1}[0-9]{2})|([0-9]{3}[.]{1}[0-9]{3}[-]{1}[0-9]{2})|([0-9]{2}[.]{1}[0-9]{3}[-]{1}[0-9]{2})" title="Por favor adicione apenas nĂșmeros">
1 curtida

Obrigado, vou testar

Funcionou! Agradeço sua ajuda.

VocĂȘ tambĂ©m pode simplificar a regex.

{1} significa “exatamente uma ocorrĂȘncia” e por isso Ă© desnecessĂĄrio. [0-9]{1} e [0-9] sĂŁo exatamente a mesma coisa. De forma geral, (qualquer coisa){1} Ă© o mesmo que (qualquer coisa).

Quanto ao [0-9], pode trocar por \d, que sĂŁo equivalentes.

JĂĄ o hĂ­fen nĂŁo precisa estar entre [ ], e o ponto pode ser escrito como \. em vez de [.].

Quanto Ă s expressĂ”es, repare que a diferença entre a primeira e a segunda Ă© a quantidade de dĂ­gitos antes do primeiro ponto: pode ter um ou dois. Sendo assim, vocĂȘ pode usar \d{1,2} (o quantificador {1,2} significa “no mĂ­nimo 1, no mĂĄximo 2”). O mesmo vale para a terceira e quarta expressĂ”es, pode começar com 2 ou 3 dĂ­gitos, entĂŁo poderia trocar por apenas \d{2,3}.

E o operador | tem menor prioridade, portanto os parĂȘnteses sĂŁo desnecessĂĄrios.

Ou seja, ficaria apenas \d{1,2}\.\d{3}\.\d{3}-\d{2}|\d{2,3}\.\d{3}-\d{2}:

<input type="text" pattern="\d{1,2}\.\d{3}\.\d{3}-\d{2}|\d{2,3}\.\d{3}-\d{2}" title="Por favor adicione apenas nĂșmeros">

Por fim, eu mudaria tambĂ©m o title, pois ele estĂĄ dizendo para sĂł digitar nĂșmeros, o que nĂŁo Ă© verdade, jĂĄ que tambĂ©m pode digitar ponto e hĂ­fen em posiçÔes especĂ­ficas. Seria melhor se a mensagem informasse os formatos corretos.


E na verdade dĂĄ para ir alĂ©m. Reparou que todas as expressĂ”es terminam com “ponto, 3 dĂ­gitos, hĂ­fen, 2 dĂ­gitos”? O que varia Ă© sĂł o que vem antes, entĂŁo poderia ser tambĂ©m:

(\d{1,2}\.\d{3}|\d{2,3})\.\d{3}-\d{2}

Agora precisa dos parĂȘnteses, para a primeira parte que varia. Dentro dos parĂȘnteses eu tenho “1 ou 2 dĂ­gitos, ponto, 3 dĂ­gitos; ou 2 ou 3 dĂ­gitos” e depois disso eu tenho o restante que Ă© igual para todos (“ponto, 3 dĂ­gitos, hĂ­fen, 2 dĂ­gitos”).

1 curtida