/ / Regex, string é uma combinação de caracteres na lista branca e não contém nenhum na lista negra - javascript, regex, qml

Regex, string é uma combinação de caracteres na lista branca e não contém nenhum na lista negra - javascript, regex, qml

1) Como regex validar a entrada do usuário para conter qualquer combinação de caracteres do grupo A e não conter nenhum caractere de outro grupo D?
2) Verifique também o comprimento da string entre 2 e 255

Em outras palavras, para todos os caracteres de string: A AND NOT D.

Eu recebo dois grupos de caracteres (whitelist elista negra) de um servidor e precisa validar a entrada do usuário com base nelas. Eu não posso afetar o design e devo viver com isso. Eu também devo usar o regex por causa de outras restrições de design.


Aqui está o que eu tenho até agora (não funciona de todo):

/^(?![23]+)[0-9]{2,255}$/

23 seria a lista negra de personagens para simplificar
0-9 seria a lista branca de caracteres para simplificar

Alguns exemplos:

3014567890 -> falha, 3 está presente
0145678902 -> falha, 2 está presente
0123456789 -> falha, 2 e 3 estão presentes
014567890 -> ok
88774411489 -> ok
5 -> falhar, não há personagens suficientes
1abc -> falha, chars ilegais abc
ab1c -> falha, chars ilegais abc
abc1 -> falha, chars ilegais abc


Obrigado!

Respostas:

4 para resposta № 1

Você está quase lá, a afirmação lookahead precisa de algum trabalho:

/^(?!.*[23])[0-9]{2,255}$/

Dessa forma, o regex dentro do lookahead negativo coincide se houver (pelo menos) um 2 ou 3 em qualquer lugar da string (ou seja, depois de qualquer número de caracteres (.*)), fazendo com que a declaração falhe.

Neste exemplo (aparentemente) simplificado, você poderia, é claro, ter usado /^[014-9]{2,255}$/.