- - PR -
ディレクトリパスの正規表現
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-03-26 23:20
いつもお世話になっています。
現在ディレクトリパスの正規表現で、 半角英数字と、*, ?, <, >, | 以外の記号を許す内容にしたいのですが、 1つの正規表現で書けないか悩み中です。 最悪、[a-zA-Z0-9]を通した後に、[^*?<>|]を通す形になるかと思っていますが、 できるだけ1つにまとめた形で実装したいので、何か方法を知ってる方がいましたら、 ご教示ください。宜しくお願いします。 | ||||
|
投稿日時: 2008-03-27 00:38
エスケープすればいけるみたいですよ。
\* ってやれば * 自身を指します。 でも、* と ? はワイルドカードですけど認識してます? | ||||
|
投稿日時: 2008-03-27 04:21
この日本語では掛かり受けが明確でないので、 半角英数字を許すのか許さないのかわかりません。 また、NTFSなら使えない文字は「<>:"/|」です。 NTFSで使用不可能な文字を検出したいだけなら [\x00-\x1F\x7F<>:"/\|] でいいと思います。 パスのセクションを認識させたいなら ([\x00-\x1F\x7F<>:"/\|]+\\) とでもすればよいでしょう。 ですが、パス文字の解析に正規表現を用いるのはあまりオススメしません。 また、自分で作れないほど難しい表現を作るのも、後々面倒になると思います。 素直に先頭から解析したほうがいろいろ利点が多いと思います。 | ||||
|
投稿日時: 2008-03-27 10:43
すみません。日本語ベタ & 説明不足でした。。。
今回使用する正規表現は ・半角英数字・記号のみを許す。 ※記号については *, ?, <, >, | の記号以外 といったものです。 上記の正規表現はディレクトリパスのバリデータにしてはゆるいのですが、 今回はこの程度のレベルでかまわないということで、 上記正規表現を作成しようとしています。 半角英数字・記号のみを許すという正規表現は[a-zA-Z!-~]で 足りるのですが、そこから *, ?, <, >, | を除くというのを 1つの正規表現で実装したいと思っています。 ぴあちゃんさん >\* ってやれば * 自身を指します。 >でも、* と ? はワイルドカードですけど認識してます? おっしゃるとおりです。\*はエスケープの必要がありますね。。。 ちょめの知識不足です。 | ||||
|
投稿日時: 2008-03-27 12:15
意味がわかりました。集合を結合した言ってことですね。 ^([a-zA-Z0-9]|[^<>|])*$ (エスケープははずしています。前後の^$は不要なら削除してください) て書けばいいのでは | ||||
|
投稿日時: 2008-03-27 13:18
indigo-xさん
回答ありがとうございます。 しかし、^([a-zA-Z0-9]|[^<>|])*$ でやると 全角が通ってしまうみたいです。(<, >, | ははじけます。) 同じような書き方をいろいろ試してみたんですが、全角が通ってしまう。。。 後半の[^<>|]のみを見てしまってるんですかねぇ。。 | ||||
|
投稿日時: 2008-03-27 13:40
サンプルだったので厳密ではありません。
以下を参照して書き換えてもらえれば対応可能と思います。 http://www.atmarkit.co.jp/fdotnet/dotnettips/054iskana/iskana.html | ||||
|
投稿日時: 2008-03-27 17:19
レス遅れてすみません。
indigo-xさんアドバイスありがとうございます。 いろいろ試したのですが、未だ出来ず(自分の知識では・・・)にいます。 時間もないので、最悪の場合の処理をとろうと思います。。。 まず半角英数字・記号のみかをチェックして、 そのあと *, ?, <, >, | が含まれていないかをチェックする という2段構成です。。 アドバイス、指摘を下さったみなさんありがとうございました。 |