1.如果准确判断是否是数字我现在写的判断如下
View上写的Scriptif (!e.target.value.match(/^\d.*$/)) {
                    e.target.value = '';
                }我发现如果前后是数字,中间是其它字符的时候这个判断就不好用了
求助还有啥判断可用?
需求是,输入框里只能输入数字,若输入其它则空
View上的输入框如下                        <td style="background-color:#e9ecef" id="xxxxx@i">
                            <div class="bg-disable-text">
                                @Html.TextBoxFor(model => (model.xxx[i].yyyyy), new { @Value = Model.xxx[i].yyyyy, @type = "number", @class = "form-control m-0 col-md-12", @maxlength = "7" })
                            </div>
                        </td>
2.如何显示三位一逗号
输入框还是上面那个输入框
由于是输入金额,因此需要显示三位1逗号.另外,由于关系到计算,我需要能正常使用数据进行计算(我怕加了逗号就不能用于计算了)
目前代码如下,但是存在以上我的问题.
求如何解决.View 上写的script           document.addEventListener('change', function (e) {            var getId = e.target.id;
            var text = $("#" + getId);
            text[0].value = e.target.value;            // 行No取得
            var searchvalue1 = "[";
            var searchvalue2 = "]";
            var name = e.target.name;
            var index = name.indexOf(searchvalue1) + 1;
            var index2 = name.indexOf(searchvalue2);
            var rownum = name.substr(index, index2 - index); //行No            //金额变更
            if (e.target.name.slice(-29) == "XXXXXXXXXX") {                var tmoId = getId.substr(0, getId.indexOf("__"))                //某一览内项目名
                var aaa = $("#" + tmoId + "__YYYYYYYY");
                //某一览内sum项目名
                var sum = $("#" + tmoId + "__SSSSSSSS");                //若输入不是数字则付空
                if (!e.target.value.match(/^\d.*$/)) {
                    e.target.value = '';
                }                //计算总价
                var times = Number(aaa[0].value) * Number(e.target..value);
                sum[0].value = times;
                $("#ssssssss_" + rownum)[0].innerText = times;
           }

解决方案 »

  1.   

    1. ^(0|[1-9]+[0-9]*)(\.[0-9]{1,4})?$2.   .toFixed(2)  //四舍五入
      

  2.   

    第一个就是常用的 匹配正浮点数的正则
    第二个 百度 js货币格式   vue里面是有封装好的 所以我也一时半会想不起来怎么写
      

  3.   

    逗号的话 要不你自己写onvaluechange事件,要不就看看哪些ui框架支持文本框输入货币的时候还带了逗号。判断是数字的话 你就做个循环干掉文本框value的逗号 在转 数值
      

  4.   

    谢谢 各位大大.
    我先分享下目前的状态吧
    逻辑正则是搜的,啥意思我也没懂,适当根据自身情况改了下(比如:金额不需要小数点及后两位)1.View的输入框改成了text,因为我发现 number不能显示带逗号的数值.(不知道是否是我自己方式有问题)                        <td style="background-color:#e9ecef" id="xxxxxx@i">
                                <div class="bg-disable-text">
                                    @Html.TextBoxFor(model => (model.aaaaaa[i].BBBBBB), new { @Value = string.Format("{0:N0}", Model.aaaaaa[i].BBBBBB), @type = "text", @class = "form-control m-0 col-md-12", @maxlength = "7" })
                                </div>
                            </td>
    第一个就是常用的 匹配正浮点数的正则
    第二个 百度 js货币格式   vue里面是有封装好的 所以我也一时半会想不起来怎么写
    很感谢你的回复,让我有思路.
    关于第一个,我发现输入 2a2,它也会判断为正确.
      

  5.   

    刚才发错了,我重新整理下目前的状态.
    首先,我发现输入框的类型是 Number 的时候 是不能显示逗号的.
    需要把类型改成 text 或者 tel如下所示:(一览里表示的时候用 string.Format("{0:N0}", bbbb) 格式化下                        <td style="background-color:#e9ecef" id="xxxx_@i">
                                <div class="bg-disable-text">
                                    @Html.TextBoxFor(model => (model.aaa[i].bbbb), new { @Value = string.Format("{0:N0}", Model.aaa[i].bbbb), @type = "tel", @class = "form-control m-0 col-md-12", @maxlength = "7", @onpaste = "return false" })
                                </div>
                            </td>鼠标点击输入框的时候,想让框里带逗号的数值,去掉逗号.
    就用鼠标按下事件进行编辑
    如下所示        
            document.addEventListener('mousedown', function (e) {
                try {
                    if (e.target.name.slice(-4) == "aaaa"
                        || e.target.name.slice(-4) == "bbb"
                        || e.target.name.slice(-4) == "ccc"
                        || e.target.name.slice(-4) == "ddd") {                    e.target.value = e.target.value.replace(",", "");                }
                }
                catch (e) {
                    return;
                }
            });
    用键盘按下事件禁止数字外的值输入        document.addEventListener('keypress', function (e) {
                try {
                    if (e.target.name.slice(-4) == "aaaa"
                        || e.target.name.slice(-4) == "bbbb"
                        || e.target.name.slice(-4) == "cccc"
                        || e.target.name.slice(-4) == "dddd") {                    if (((e.keyCode < 48) || (e.keyCode > 57)) && (e.keyCode != 8)
                        && (e.keyCode != 9)) {
                            window.event.returnValue = false;
                        }
                    }
                }
                catch (e) {
                    return;
                }
            });由于我的需求不需要小数点,
    因此关于正则表达式继续使用我原来的样式
    其它我找到的正则表达式(可以带小数点的)
    目前都没有能完美匹配数字的...这是个课题继续刚才的处理
    输入框里输入完数字后,
    要在失去光标的时候再次编辑带逗号
    事件是[focusout]
    如下:        function fomart(data) {
                var fomart = data.replace(",", "");
                fomart = fomart.replace(/^(\d*)$/, "$1.");
                fomart = (fomart + "00").replace(/(\d*\.\d\d)\d*/, "$1");
                fomart = fomart.replace(".", ",");
                var re = /(\d)(\d{3},)/;
                while (re.test(fomart))
                    fomart = fomart.replace(re, "$1,$2");
                fomart = fomart.replace(/,(\d\d)$/, "");            return fomart;
            }
    上述编辑是网上找的,我自己不太会用.
    只能说能满足我的需求,我就照搬了.
    如果有其它更为便捷的 加逗号的方式 还望告知!!!以上,暂时解决的需求,但还是不够完美.
      

  6.   

    //校验输入的保证金的金额是否正确
                    var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
                    var bailPayMoney = $('#bailPayMoney').textbox('getValue');//EasyUI textbox 输入框的取值方式
                    if (!reg.test(bailPayMoney)){
                        $.messager.alert({
                            title : '提示信息!',
                            msg : '保证金金额的输入格式不正确,请确认!'
                        });
                        return ;
                    }
      

  7.   

    ^[1-9]\d*$    //匹配正整数
    ^-[1-9]\d*$   //匹配负整数
    ^-?[1-9]\d*$   //匹配整数
    ^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
    ^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)
    ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
    ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
    ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
    ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0)
    ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0)