Javascript regex pour la validation des noms de fichiers

J'ai un regexp pour valider les noms de fichiers. Voici:

/[0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]+$/ 

Il devrait permettre des noms de fichiers comme ceci:

 aaa aaa.ext a# A9#.ext 

Les caractères suivants ne sont pas autorisés \ / : * ? \" < > | \ / : * ? \" < > |

Le problème est que les noms de fichiers comme *.txt ou /\kk passent la validation. Je fais une validation avec l'événement keyup. Donc, quand j'ai mis un personnage supplémentaire après l'absence de celui-ci, il montre que tout est correct.

Vous devez ajouter une ancre de départ:

 /^[0-9a-zA-Z ... ]+$/ 

Cela indique au moteur de faire correspondre dès le début de la saisie jusqu'au bout de l'entrée, alors que pour votre expression d'origine, il suffit de correspondre à la fin de l'entrée.

Pour les noms Windows.

 var isValid=(function(){ var rg1=/^[^\\/:\*\?"<>\|]+$/; // forbidden characters \ / : * ? " < > | var rg2=/^\./; // cannot start with dot (.) var rg3=/^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i; // forbidden file names return function isValid(fname){ return rg1.test(fname)&&!rg2.test(fname)&&!rg3.test(fname); } })(); isValid('file name'); 

Vous devez ancrer l'expression en utilisant ^ et $ . Par exemple:

 /^[-\w^&'@{}[\],$=!#().%+~ ]+$/ 

Notez que vous devez échapper - dans une classe de personnage, ou placez-le en premier / dernier.

 /^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\|\*\?\\:<>/$"]*[^\.\|\*\?\\:<>/$"]+$/ Must not be empty. Must not start with . Must not be com0-com9, con, lpt0-lpt9, nul, prn Must not contain | * ? \ : < > $ Must not end with . 

Je voudrais essayer quelque chose avec ce Regex (vous pouvez même créer un attribut de validation pour ASP.NET MVC avec lui!):

 @"^[^\u0022\u003C\u003E\u007C\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F\u003A\u002A\u003F\u005C\u002F]*$" 

Si elle correspond à l'entrée, il s'agit d'un nom de fichier valide (au moins sous Windows).