【问题标题】:validation of field having first two digits and one alphabet验证具有前两位数字和一个字母的字段
【发布时间】:2017-06-13 02:13:13
【问题描述】:

我必须开发一个用于验证文本字段的 javascript 代码。最后一个字符必须是“M”或“D”或 0-9 之间的任何数字。字段的长度不得超过 3 个字符。

例如。有效输入为 8M 或 25D 或 110 或 45 文本字段的格式是这样的::

  1. 如果最后一个字符是字母,那么它必须是 'M' 或 'D'
  2. 如果最后一个字符是 M,则数字必须小于 12,即 11M 或 4M,但不能为 12M 或 13M
  3. 如果最后一个字符是 D,则数字必须小于 30,即 1D 或 15D 或 25D 但不能是 30D 或 45D

我如何为这个验证编写 javascript 代码?请帮忙。

<asp:TextBox ID="txtFact" runat="server" AutoCompleteType="Disabled"  MaxLength="3" />

【问题讨论】:

  • 我正在努力。一定要尽快更新
  • @SorangwalaAbbasali 谢谢!!!
  • M 和 D 总是大写吗?
  • 好的,那么您今天肯定会得到答案。
  • @nischalinn 这个问题看起来不像是一个正则表达式,所以我认为你可能必须编写 if-then 语句。这个呢?jsbin.com/budesofuta/edit?js,console

标签: javascript jquery asp.net validation


【解决方案1】:

你可以在 jquery 中这样做: 我测试了它的工作原理。如果您还有什么想要的,请告诉我,我会添加它。

function findAns() {
    var i = 12, j = 30, id = "12M";
    var last = id.substr(id.length-1);
    var lengthOfString = id.length;
    var firsttwoCharacters = id.substr(0, 2);
    if (lengthOfString>2) {
        alert(firsttwoCharacters);
        if (last == "M") {
            if (i-firsttwoCharacters>0) {
                alert("OK");
            }
            else {
                alert("Not Ok");
            }
        }
        else if(last=="D") {
            if (j - firsttwoCharacters > 0) {
                alert("OK");
            }
            else {
                alert("Not Ok");
            }
        }
    }
    else {
        last = id.substr(id.length - 1)
        var firstChar = id.substr(0, 1);
        alert(firstChar);
        if (last == "M") {
            if (i - firstChar > 0) {
                alert("OK");
            }
            else {
                alert("Not Ok");
            }
        }
        else if (last == "D") {
            if (j - firstChar > 0) {
                alert("OK");
            }
            else {
                alert("Not Ok");
            }
        }
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" name="name" value="Button click" onclick="javascript: findAns();" />

【讨论】:

  • 其实不用紧张。只需使用相同的脚本链接和从 textArea 调用的函数,您就会得到答案。
【解决方案2】:

根据您的要求将其作为答案发布。

function validate(str){
  console.log('Testing:' + str);
  var number_regex = /^[1-9]\d*$/;

  if(str.length > 3){
    console.log('invalid length');
  }
  else if( str.slice(-1) === 'M' ){
    console.log('M case');
    var number_part = str.slice(0, -1);

    if( !number_regex.test(number_part) ){
      console.log('invalid input');
    }
    else if( +number_part > 11 ){
      console.log('invalid number part input');
    }
    else {
      console.log('valid input');
    }
  }
  else if( str.slice(-1) === 'D' ){
    console.log('D case');
    var number_part = str.slice(0, -1);

    if( !number_regex.test(number_part) ){
      console.log('invalid input');
    }
    else if( +number_part > 29 ){
      console.log('invalid number part input');
    }
    else {
      console.log('valid input');
    }
  }
  else if( number_regex.test(str)  ){
    console.log('all numbers case')
    console.log('valid input')
  }
  else {
    console.log('invalid input');
  }
}


validate('8M');
validate('asdf');
validate('asd');
validate('1M');
validate('12M');
validate('13M');

validate('0D');
validate('12D');
validate('29D');
validate('30D');

validate('301');
validate('001');
validate('999');

【讨论】:

    【解决方案3】:

    @nischalinn

    请尝试以下正则表达式

    var regexMD = /^((0?[1-9]|1[012])M|(0?[1-9]|[12][0-9]|3[01])D)$/;
     regexMD.test('01D');   //true
     regexMD.test('1D');    //true
     regexMD.test('32D');   //false
     regexMD.test('35D');    //false
    
     regexMD.test('01M');   //true
     regexMD.test('1M');    //true
     regexMD.test('13M');   //false
     regexMD.test('23M');    //false
    

    【讨论】:

    • 你是用什么工具来生成这个正则表达式还是你自己写的?
    猜你喜欢
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多