使用正则表达式替换" g"最多输入数字最多2位小数。

时间:2015-02-22 03:55:43

标签: jquery asp.net regex

使用Regex ,我想允许用户输入最多5位数的号码。最多2个小数位,允许非零"

喜欢 67823.67或1或1.2

不喜欢 .3或3242.34234.34或234.2342

下面的代码允许数字和句点。但也允许(.3或3242.34234.34或234.2342)

  $('input').keyup(function () {
        if (this.value.match(/[^0-9\.]/g))
            this.value = this.value.replace(/[^0-9\.]/g, '');
    });

下面的代码按预期工作(来源:http://www.mysamplecode.com/2011/10/javascript-validate-input-text-field.html

 function testInputData(myfield, restrictionType) {
       var decimalOnly = /^\s*-?[1-9]\d*(\.\d{1,2})?\s*$/ ;
       var myData = document.getElementById(myfield).value;
       if (myData !== '') {
           if (restrictionType.test(myData)) {
               alert('It is GOOD!');
           } else {
               alert('Your data input is invalid!');
           }
       } else {
           alert('Please enter data!');
       }
       return;
   }

HTML

<table>
    <tr>
      <td>
         Check for upto 2 Decimal:
       </td>
       <td>
       <input type="text" id="input2" maxlength="30" size="30" />
       </td>
       <td>
       <input type="button" value="Test" onclick="Javascript:testInputData('input2',decimalOnly)" />
        </td>
     </tr>
</table>

但是,这不起作用,

$('input').keyup(function () {
        if (this.value.match(/^\s*-?[1-9]\d*(\.\d{1,2})?\s*$/g))
            this.value = this.value.replace(/^\s*-?[1-9]\d*(\.\d{1,2})?\s*$/g, '');
    });

HTML

 <table>
      <tr>
         <td>
           <asp:TextBox ID="txt1" runat="server" Width="50"/>
          </td>
      </tr>
 </table>

1 个答案:

答案 0 :(得分:0)

我认为这应该适合你。

(\d{1,3}\.\d{1,2}|\d{4}\.\d|\d{1,5})

它首先检查它是否符合格式123.4123.45,但未检查它是否符合格式1234.5,未能检查是否符合整数一到五位数。

如果您不想允许{1,2}而非想要123.4,您可能希望将123.40更改为一个。

如果整个字段都遵循此格式,您可以执行以下操作:

$('input').keyup(function () {
    if (!(this.value.match(/^(\d{1,3}\.\d{1,2}|\d{4}\.\d|\d{1,5})$/)))
        alert('value DOES NOT fit pattern');
});

更新,我更喜欢这个版本的上述正则表达式,似乎工作得更快。

$('input').change(function () {
    var rmatch = new RegExp("^(?!(?=\\d+\\.\\d+$)(.{3,6}$)|(?=\\d{1,5}$)).+$");
    if (this.value.match(rmatch)) {
        this.value = "";
    }
});

根据你的评论和你对全球的使用,你似乎想要这样的东西..你不能使用一个关键事件,因为当一个人想输入小数时它会跳闸。您可以修改此正则表达式以接受onKeyDown,但您需要单独的正则表达式才能捕获。它最终是一个大混乱,使用blur() imo。

更好
$('input').blur(function () {
    var rmatch = new RegExp("(\\d{1,3}\\.\\d{1,2}|\\d{4}\\.\\d|\\d{1,5})","g");
    var getMatches = this.value.match(rmatch);
    if (getMatches) {
        this.value = getMatches.join(" ");
    } else {
        this.value = "";
    }
});

我是根据您使用g的方式编写的,但也许您只想在框中使用一个数字(更有可能)。我会这样做

$('input').blur(function () {
    var rmatch = new RegExp("^(\\d{1,3}\\.\\d{1,2}|\\d{4}\\.\\d|\\d{1,5})$","g");
    var getMatches = this.value.match(rmatch);
    if (!getMatches) {
        this.value = "";
    }
});

<强> JSFiddle demonstration of both methods.