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â).