ASP.NET テキストボックスに $ 記号付きの通貨を表示するように強制する
-
03-07-2019 - |
質問
ASP.NET テキストボックスを取得して通貨値のみを受け入れ、コントロールが検証されるときに事前に $ 記号を挿入する方法はありますか?
例:
10.23 が $10.23 になります
$1.45 は $1.45 のまま
10.a は有効な数値ではないためエラーが発生します
数値が有効であることを確認する RegularExpressionValidator がありますが、テキストに $ 記号を強制的に挿入する方法がわかりません。JavaScript は機能するかもしれないと思いますが、これを行う別の方法があるかどうか疑問に思っていました。
解決
ASP.NET マスクされた編集 からの制御 AJAX 制御ツールキット あなたが求めていることを達成することができます。
他のヒント
回答がすでに受け入れられているのはわかっていますが、同じ問題を抱えていて複数の回避策を探している人のために別の解決策を提供したいと思いました。
これを行う方法はjQueryを使用することです 通貨フォーマットプラグイン クライアント側でユーザー入力をバインドします。サーバー側でこの入力を解析するには、次の操作のみが必要です。
// directive
using System.Globalization;
// code
decimal input = -1;
if (decimal.TryParse(txtUserInput.Text, NumberStyles.Currency,
CultureInfo.InvariantCulture, out input))
{
parameter = input.ToString();
}
この唯一の欠点は、ユーザーが JavaScript をオフにできることです。その場合、サーバー側で実行されている RegEx バリデーターがフォールバックとして機能します。コントロールがデータバインドされている場合は、次のことを行うだけです。 decimalValue.ToString("{0:c}")
、他の人が述べたように、適切な通貨形式を表示するために。
これの素晴らしい点は、ユーザーがテキストボックスを入力すると、 $0.00
クライアント側では、サーバー側の if ステートメントは false を返します。データベース内で 10 進数値が NULL 可能でない場合は、単に変更してください decimal input = -1
に decimal input = 0
デフォルト値は 0 になります。
これを行うもう 1 つの方法は、ドル記号をテキスト ボックスの左側の外側に配置することです。箱の内側にドル記号を入れる必要は本当にあるのでしょうか、それとも単純なラベルで十分なのでしょうか?
decimal sValue = decimal.Parse(txtboxValue.Text.Trim());
// Put Code to check whether the $ sign already exist or not.
//Try making a function returning boolean
//if Dollar sign not available do this
{ string LableText = string.Format("{0:c}", sValue); }
else
{ string LableText = Convert.ToString(sValue); }
string sValue = Convert.ToString(txtboxValue.Text.Trim());
// Put Code to check whether the $ sign already exist or not.
//Try making a function returning boolean
//if Dollar sign not available do this
{ string LableText = string.Format("{0:c}", "sValue"); }
else
{ string LableText = Convert.ToString(sValue); }
.CS では、次の行に沿ってパターン マッチを実行できます。
string value = text_box_to_validate.Text;
string myPattern = @"^\$(\d{1,3},?(\d{3},?)*\d{3}(\.\d{0,2})|\d{1,3}(\.\d{2})|\.\d{2})$";
Regex r = new Regex(myPattern);
Match m = r.Match(value);
if (m.Success)
{
//do something -- everything passed
}
else
{
//did not match
//could check if number is good, but is just missing $ in front
}