17

ファイル名を検証するための正規表現があります。はい、これ:

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

次のようなファイル名を許可する必要があります。

aaa
aaa.ext
a#
A9#.ext

次の文字は使用できません\ / : * ? \" < > |

問題は、ファイル名が検証に合格する*.txtかのようになることです。/\kkkeyup イベントで検証を行っています。したがって、許可されていない文字の後に余分な文字を1つ追加すると、すべてが正しいことが示されます。

4

6 に答える 6

42

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');
于 2012-06-19T13:06:41.143 に答える
9

開始アンカーを追加する必要があります。

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

これにより、エンジンは入力の最初から最後まで一致するように指示されますが、元の式では、入力の最後でのみ一致する必要があります。

于 2012-06-19T12:23:43.293 に答える
8

^andを使用して式を固定する必要があり$ます。例えば:

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

-文字クラスでエスケープするか、最初/最後に配置する必要があることに注意してください。

于 2012-06-19T12:23:31.410 に答える
5
/^(?!\.)(?!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 .
于 2014-12-08T03:46:31.390 に答える