- PR -

住所の正規表現

投稿者投稿内容
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-10-25 22:03
つまり、やりたいことは、住所文字列を複数行で印字する際に、
"-"区切りで表現された部分の途中で改行(折り返し)されてしまわないように
禁則処理をしたい、ということだったんですね。

#住所の中で、丁目と番、号や番地、場合によってはマンションの号室などは
#"-"区切りで表現されることがありますが、途中で改行されてしまうと
#配送する人が見間違えてしまうから、ってとこですかね。

引用:

都道府県+市町村+番地+アパート名と分かれてきます。



ただ、元データが分かれてくるなら、一つの文字列にくっつける前に
文字数を見て、番地の前なり、アパート名の前に改行を入れればよいような気もしますが。

[ メッセージ編集済み 編集者: よねKEN 編集日時 2008-10-25 22:07 ]
未記入
大ベテラン
会議室デビュー日: 2008/07/11
投稿数: 182
投稿日時: 2008-10-26 03:11
経過報告です。

Regex regex = new System.Text.RegularExpressions.Regex(@"-[0-90-9]{1,4}|‐[0-90-9]{1,4}|−[0-90-9]{1,4}|―[0-90-9]{1,4}|ー[0-90-9]{1,4}");
MatchCollection mc = regex.Matches(data);

よねKENさんに教えていただいた方法で、ハイフン(全半角)&マイナス(全半角)&長音&ダッシュの判別できました。

>ただ、元データが分かれてくるなら、一つの文字列にくっつける前に
文字数を見て、番地の前なり、アパート名の前に改行を入れればよいような気もしますが。

ここが微妙にややこしいのですが(先程の仕様に明記してませんでした)、なるべく全て表示させる為、全文字列データに対して印字時の幅を求めます。足りなければ、1引いたフォントサイズと、固定フォントサイズまで縮小します。それでもオーバーしてしまうのは、もう知らない(カット)と言う仕様です。ただ、おっしゃるように教えていただいた部分は結合してすぐに改行挿入します。

また、データによっては、都道府県+市町村+番地+アパート名が結合されてくる場合もあります。その場合はもうしょうがないですね、番地部で改行しても。番地部を優先させる事(改行されないように番地末尾から遡って文字列幅計算)も可能ですが、都道府県・市町村で改行が急に入る方が違和感がありますね。

また、ゆむさんのおっしゃるように県市町村データはほぼ固定で、そのようなツールを使うことも可能ですが、このアプリ自体が別アプリの中間アプリの位置付けです。大元のデータは別会社のアプリ上で作られたものです。来た物を正と考えたいと思ってます。(そもそもユーザ登録で厳密にやるべき事と思うんですがね・・、DBのデータの整合性は保たれているのか・・。都道府県だけ固定ですが、他入力が全てがゆるすぎる気がします。)

愚痴っぽくなってしまいましたが、ご親切にありがとうございました。
本当に助かりました。

[ メッセージ編集済み 編集者: 未記入 編集日時 2008-10-26 03:12 ]
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-10-26 13:54
引用:

未記入さんの書き込み (2008-10-26 03:11) より:
Regex regex = new System.Text.RegularExpressions.Regex(@"-[0-90-9]{1,4}|‐[0-90-9]{1,4}|−[0-90-9]{1,4}|―[0-90-9]{1,4}|ー[0-90-9]{1,4}");
MatchCollection mc = regex.Matches(data);



正規表現部分は、
コード:

Regex regex = new System.Text.RegularExpressions.Regex(@"(-|‐|−|―|ー)[0-90-9]{1,4}");



コード:

Regex regex = new System.Text.RegularExpressions.Regex(@"[-‐−―ー][0-90-9]{1,4}");


というふうにまとめて書けます。
正規表現でどんな風に記述できるのかは以下のURLを一通り目を通しておくことをお勧めします。
http://msdn.microsoft.com/ja-jp/library/az24scfc(VS.80).aspx

引用:

よねKENさんに教えていただいた方法で、ハイフン(全半角)&マイナス(全半角)&長音&ダッシュの判別できました。



以前の投稿でコード例を示しましたが
コード:

//address = "東京都足立区テスト町1-1-1000アパートー101"; // OK
// ただし、ハイフン以外に長音記号も
// 正規表現のチェック対象に入れるとNGになる。



こういう住所の場合(マンション名の最後がー(長音記号))は期待する結果には
なりませんので、その点は仕方ないものとするのか、判断してくださいね。
これを仕方ないものとする場合、制限事項として挙げておかないと
テスト時に不具合として返ってきますよ。


[ メッセージ編集済み 編集者: よねKEN 編集日時 2008-10-26 13:55 ]
bluefog
会議室デビュー日: 2008/10/27
投稿数: 1
投稿日時: 2008-10-27 23:09
通りすがりですが

・全国には最大で41丁目があります。(帯広市の南41丁目)

・1の町 という地名があったりします(漢数字ではなくローマ数字の1が正しいようです)

スキルアップ/キャリアアップ(JOB@IT)