【问题标题】:$ and comma should allow on text box but should not save them$ 和逗号应该允许在文本框中,但不应该保存它们
【发布时间】:2015-03-09 07:34:12
【问题描述】:

我有以下提到的要求。 在文本框中需要允许任何字符,如 "$" 和 ,但在保存时需要去除它们并只保存数字和 "."

例如:如果用户输入 $14,500.50 节省 14500.50

在输入"$""," 时不显示错误。

我该怎么做?任何帮助将不胜感激。

注意:此时文本框只允许输入数字字符。

【问题讨论】:

  • 到目前为止你尝试了什么?向我们展示您的代码。
  • @doldt 不知道该怎么做。此时我确实有数字文本框。
  • 右键,查看源代码。也发布服务器接收方法
  • @mplungjan '服务器接收方法'是什么意思。这只是绑定到模型属性的那一刻的数字文本框?
  • 你标记了这个 JavaScript 和 C#,所以由于你没有进一步的描述,我假设 JavaScript 用于验证,C# 用于存储它。因此,我们需要用于阻止 $ 和逗号的验证方法/正则表达式以及 C# 方法,以查看您当前如何解析收到的值。

标签: javascript c# angularjs


【解决方案1】:

您可以只解析数字,包括文化信息和数字样式

string number = "$14,500.50";
double d;
CultureInfo c = CultureInfo.CreateSpecificCulture("en-US");
if(Double.TryParse(number,
                   NumberStyles.Number | NumberStyles.AllowCurrencySymbol,
                   c,
                   out d))
    Console.WriteLine(d);

输出:14500.5

IDEOne example

Double.TryParse

【讨论】:

    【解决方案2】:

    你可以使用

    var newString=yourstring.replace(/[$,]/g, "");
    

    【讨论】:

      【解决方案3】:

      有大量插件掌握了这一点。 https://github.com/RobinHerbots/jquery.inputmask。 您需要屏蔽您的输入,以便您可以访问屏蔽的输入值和原始十进制值。

      【讨论】:

      【解决方案4】:

      您可能对字段掩码感兴趣。 angular-input-masks 应该允许你这样做。请参阅演示中的ui-money-mask

      【讨论】:

        【解决方案5】:

        其实很简单,你只需要在 $parsers pipeline 中添加替换函数即可。当任何值从 view 转到 model 时,$parsers 会进行所需的转换和验证。

        假设这是你的输入标签:

        <body ng-app="app">
        <input type="text" ng-model="currency">
        </body>
        

        现在,在 app.js 文件中:

        var app=angular.module('app',[])
        app.directive('input',function(){
        return {
            restrict:'E',
            require: 'ngModel',
            link: function(scope,elm,attr,ngModelCtrl){
                function convert(input){
                    input = input.replace(/\$/g,'');
                     input = input.replace(/,/g,'');
                     return input;
                }
                ngModelCtrl.$parsers.push(convert);
            }
        }
        })
        

        在这里,您正在修改输入指令以将 $ 和 , 替换为 ''(在转换函数中完成)。 convert 函数被推送到 $parsers 管道,该管道将从输入指令中的任何 $ 和任何数字中删除,并将删除的数字存储在模型中。

        这里是一个笨蛋link

        您可以看到模型值“货币”不包含 $ 和 , 符号

        【讨论】:

        • 如果您对 $parsers 和 ngModelCtrl 不太熟悉,请查看这篇博文link
        • 您能告诉我如何过滤其他字符($、逗号和点 (.) 除外)吗?也就是说只允许数字及以上3种字符类型?
        • 是的,你也可以这样做,通过添加允许最少三个字符的函数,这在 $parsers 管道中只能是数字。我已经修改了以前的 plunker link 以允许这样做。在 plunker 中,min3numbers 函数只允许最少三个字符,也就是数字字符,只有这样该值才会保存在模型中。 (模型的值在
           标签内)
        猜你喜欢
        • 2023-02-24
        • 1970-01-01
        • 1970-01-01
        • 2014-06-22
        • 2013-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多