Je ai ci-dessous exigence où un texte saisi doit correspondre à l'un des caractères autorisés ci-dessous et obtenir tous les caractères ne correspondant pas au modèle d'expression régulière.
- 0-9
- A-Z,a-z
Et des caractères spéciaux comme:
- espace,.@,-_&()'/*=:;
- retour chariot
- fin de ligne
L'expression régulière que j'ai pu construire est la suivante
/[^a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/]/g
Pour un exemple donné, disons input='123.@&-_()/*=:/\';#$%^"~!?[]av'
. Les caractères invalides sont '#$%^"~!?[]'
.
Voici l'approche que j'ai suivie pour obtenir les caractères non correspondants.
1) Construisez la négation du modèle d'expression régulière autorisé comme ci-dessous.
/^([a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/])/g
(veuillez corriger si cette expression régulière est correcte?)
2) Utilisez la fonction replace pour obtenir tous les caractères
var nomatch = '';
for (var index = 0; index < input.length; index++) {
nomatch += input[index].replace(/^([a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/])/g, '');
}
donc nomatch='#$%^"~!?[]' // enfin
Mais ici, la fonction replace retourne toujours un seul caractère non apparié. donc en utilisant une boucle pour tout obtenir. Si l'entrée comporte 100 caractères, elle boucle 100 fois et est inutile.
Existe-t-il une meilleure approche pour obtenir tous les caractères ne correspondant pas au modèle d'expression régulière dans les lignes ci-dessous.
- Une meilleure expression régulière pour obtenir les caractères non autorisés (que la négation de l'expression régulière que j'ai utilisée ci-dessus)?
- Éviter les boucles inutiles?
- Une approche en une seule ligne?
Un grand merci pour toute aide sur ce point.