インクリメンタルなカイハツにっき

.NET 開発手法を中心に、これから始める方の一助となる記事を載せていく予定です。

ASP.NET MVC に全角半角変換処理を組み込む

半角で指定されたものを全角に変換したい。
入力フォームを利用している、webや業務系アプリでは、よくあることだと思います。

ASP.NET MVC を例に、そのやり方を見ていきます。

疎かにできない全角半角問題

日本語というのは、まぁ面倒臭いもので、同じ文字であるにも関わらず、全角と半角があったりします。

  • 2」この2は半角
  • 」この2は全角

見た目そんな変わらへんし、どっちでもええやん。
と言いたいところですが、内部的には全く別物です。

「このフィールドはゼンカクで50文字までね。ハンカク?ダメダメ!全部ゼンカクにして入れて!」

『面倒くせぇなー』

とか思っても、そういう仕様であれば、そこは素直に従うしかないでしょう。

ユーザー任せは好機をのがす?

例えば何かの登録フォームで、住所欄があるとします。

この住所欄は全角で。よく見かける仕様ですね。
Validation 設けて、半角文字が入っていたら、
「住所は全角で入力してください」
こんなメッセージを出して、エラーにしてしまう。

実によくあります。
でもこれってどうですか?
正直、住所を入れるのに半角はよく利用します。
数字などは半角だと Enter なしで入るし、そもそも、全角の棒ってどう出すねん。的な。
右側のテンキー使ったら、勝手に半角になりますけど...
特にスマートフォンだと。全角で「99」ってどうやって?

そして最終的には
「もーえーわ!」

...はい!
この時点で、大事な顧客をひとり失ってしまいました。
決して大げさな話ではないです。

この程度のことは、本来システム側で対応すべきなのです。

Microsoft.VisualBasic.Strings クラス

そんな問題は今に始まった話ではありません。.NETではそんなクラスがちゃんと用意されています。

それが、Microsoft.VisualBasic.Strings クラス。

ただしこのクラス、言語として VB.NET を利用している場合は、何の問題もなく利用できるのですが、C# を利用している場合、初期状態では利用できません。参照の追加が必要です。
Microsoft.VisualBasic を追加することにより、利用可能になります。
(参照の追加は、対象となるプロジェクトを選択して、「プロジェクト」または右クリックから「参照の追加」で可能です。

全角半角変換 参照設定

Microsoft.VisualBasic.Strings クラスにはいくつかのメソッドが存在しますが、今回利用するのは StrConv メソッド
例えば、次みたいな感じです。

var result = Microsoft.VisualBasic.Strings.StrConv("a", VbStrConv.Wide);

ちなみにこれは、1バイト(半角)文字を、2バイト(全角)文字に変換します。戻り値 result には、全角の「a」が返ってきます。
もちろん、文字列で指定も可能ですし、全角半角混ざってても問題ありません。

// using を使用
using Microsoft.VisualBasic;
// ... 中略
    var result = Strings.StrConv("123万yen", VbStrConv.Wide);
// ※ result は 123万yen

一方全角から半角にする場合は VbStrConv.Narrow を指定。

// 「3」と「e」が全角
var result = Strings.StrConv("123万yen", VbStrConv.Narrow);
// ※ result は 123万yen

「万」など半角が存在しないものは、そのままで。非常に便利です。

ただし万能ではありません。一部の半角文字で全角変換時に対応がわからず「?」となってしまうものもあります。まぁその辺りは機会があれば...

この VbStrConv 列挙型ですが、他にも、「Katakana」とかありますね。その名の通り、ひらがなをカタカナに変換してくれたりもします。色々と使えそうですね。

...とまぁ、変換方法がわかったところで、これを、ASP.NET MVC でどのように利用するか考えてみます。
「考えるまでもないのでは?」
そうなんですが...せっかくなんで Model の「属性」とか「ModelBinder」とか使ってみましょ。

続きはこちら