Javascript Regex para limitar o número de caracteres por linha

Aug 26 2020

Estou tentando criar uma Expressão Regular JS para limitar a quantidade de caracteres por linha em uma área de texto html. Idealmente, eu preferiria tê-lo como um Javascript Regex, pois é mais fácil de usar para nosso mecanismo de validação de formulário.

Gostaria de criar uma expressão regular que valide que uma string possui 10 caracteres por linha e no máximo 3 linhas

A ideia seria validar strings como as seguintes:

01234567890
a
b

A primeira linha aqui tem 11 caracteres, então toda a string deve ser rejeitada/

a
b
c
d

Este texto tem 4 linhas, portanto também deve ser rejeitado.

Eu tentei com o seguinte regex, mas não está funcionando como esperado:

^((?:\n)?[^\n]{0,10}){0,3}$

alguma pista sobre o que estou fazendo de errado?

Respostas

1 WiktorStribiżew Aug 26 2020 at 19:32

Você pode usar

^.{0,10}(?:\r?\n.{0,10}){0,2}$

Veja a demonstração de regex

Detalhes

  • ^- início da corda
  • .{0,10}- zero a dez caracteres, exceto caracteres de quebra de linha
  • (?:\r?\n.{0,10}){0,2}- zero, uma ou duas ocorrências de
    • \r?\n- Fim de linha CRLF ou LF
    • .{0,10}- zero a dez caracteres, exceto caracteres de quebra de linha
  • $- fim da corda.

JavaScript:

const valid_rx = /^.{0,10}(?:\r?\n.{0,10}){0,2}$/;
const testFunc = () => {
    if(!valid_rx.test(document.all.mytextarea.value))
    {
        console.log("Please use correct format.");
        return false;
    }
}
<textarea id="mytextarea" cols="50" rows="10">a
b
c
</textarea>
<button onclick="testFunc()">Click Me</button>