2012-04-25 1 views
5

このような方法でaを検証する必要があります。正規表現でファイル名を確認する

validateFileName(Editable s) { 
     String filtered_str = s.toString(); 
     if (filtered_str.matches(".*[regexp].*")) { 
      filtered_str = filtered_str.replaceAll("[regxp]", ""); 
      s.clear(); 
      s.append(filtered_str);} 

不正な文字や空白をすべて除外する正規表現はどれですか。

あなたは文字のリストに任意の「ilegal」文字を追加することができます

'^[^*&%\s]+$'

(:あなたのアイデアは、あなたがのようなものを使用することができ、CHARだけilegalと空間を除外することであるならば、私は、Linux

+3

Unixファイルシステム上のファイル名にある不正な文字は、 '/'(パス区切り)と '\ 0'(Cの文字列の最後)です。 – geekosaur

答えて

4

を使用していますこの場合は*、&、%とスペースは無視されます)\sはスペースです! []の中にある^は、正規表現の構文の一部です。ではなくは、[]の中の任意の文字と一致します。

9

POSIX準拠のオペレーティングシステムを使用している場合、ファイル名の有効な文字は、-z、A-Z、0-9、ピリオド、アンダースコア、およびハイフンです。 「違法な」文字にマッチする正規表現は、したがって、

[^-_.A-Za-z0-9]

補遺のようになります。あなたは完全にポータブルファイル名をしたい場合です。私が下のJosipのコメントで修正したように、POSIX自体は実際にはより多くの文字を許可します。

+0

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.htmlは「名前を構成するバイトにはまたは文字が含まれていないので、これは正しくありません」と表示されます。セクション3.170ファイル名のセクションを参照してください。 –

+0

ああ、そうです。私は答えが**完全に移植可能な**ファイル名が必要な場合は、私が記述した正規表現を使用することを明確にする必要があります。これは、「_POSIXプログラマーズガイド:ポータブルUNIXプログラムの作成」(Donald Lewine著、1991年)の63-64ページを参照してください。 – Anachronist

+0

これはまだ非常に限定的です。これは1991年には理解できるものですが、最近はそうではありません。ファイル名のコンマとスペースはユーザー間で非常に共通しています。彼らはあなたがこれを適用するとおそらく文句を言うでしょうし、80年代の限界への遵守は必ずしも合理的な根拠とはみなされません。 –

関連する問題