Javascript 验证具有前两位数字和一个字母的字段

Javascript 验证具有前两位数字和一个字母的字段,javascript,jquery,asp.net,validation,Javascript,Jquery,Asp.net,Validation,我必须开发一个javascript代码来验证文本字段。最后一个字符必须是“M”或“D”或0-9之间的任何数字。字段长度不得超过3个字符 有效输入为8M或25D或110或45 文本字段的格式如下所示: 如果最后一个字符是字母,那么它必须是“M”或“D” 如果最后一个字符是M,则数字必须小于12,即11M或4M,而不是12M或13M 如果最后一个字符是D,则数字必须小于30,即1D或15D或25D,但不是30D或45D 如何编写此验证的javascript代码?请帮忙 <asp:TextBox

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

有效输入为8M或25D或110或45 文本字段的格式如下所示:

  • 如果最后一个字符是字母,那么它必须是“M”或“D”
  • 如果最后一个字符是M,则数字必须小于12,即11M或4M,而不是12M或13M
  • 如果最后一个字符是D,则数字必须小于30,即1D或15D或25D,但不是30D或45D
  • 如何编写此验证的javascript代码?请帮忙

    <asp:TextBox ID="txtFact" runat="server" AutoCompleteType="Disabled"  MaxLength="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
    
    @尼斯查林酒店

    请试试下面的正则表达式

    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
    

    在jquery中可以这样做: 我测试了它,它工作了。如果你还有什么要说的,我会补充的

    函数findAns(){
    变量i=12,j=30,id=“12M”;
    var last=id.substr(id.length-1);
    var lengthOfString=id.length;
    var firsttwoCharacters=id.substr(0,2);
    如果(长度字符串>2){
    警报(前两个字符);
    如果(最后一个=“M”){
    如果(i-firsttwoCharacters>0){
    警报(“正常”);
    }
    否则{
    警报(“不正常”);
    }
    }
    否则如果(最后一个==“D”){
    如果(j-前两个字符>0){
    警报(“正常”);
    }
    否则{
    警报(“不正常”);
    }
    }
    }
    否则{
    last=id.substr(id.length-1)
    var firstChar=id.substr(0,1);
    警报(firstChar);
    如果(最后一个=“M”){
    如果(i-firstChar>0){
    警报(“正常”);
    }
    否则{
    警报(“不正常”);
    }
    }
    否则如果(最后一个==“D”){
    如果(j-firstChar>0){
    警报(“正常”);
    }
    否则{
    警报(“不正常”);
    }
    }
    }
    }

    您可以在jquery中这样做: 我测试了它,它工作了。如果你还有什么要说的,我会补充的

    函数findAns(){
    变量i=12,j=30,id=“12M”;
    var last=id.substr(id.length-1);
    var lengthOfString=id.length;
    var firsttwoCharacters=id.substr(0,2);
    如果(长度字符串>2){
    警报(前两个字符);
    如果(最后一个=“M”){
    如果(i-firsttwoCharacters>0){
    警报(“正常”);
    }
    否则{
    警报(“不正常”);
    }
    }
    否则如果(最后一个==“D”){
    如果(j-前两个字符>0){
    警报(“正常”);
    }
    否则{
    警报(“不正常”);
    }
    }
    }
    否则{
    last=id.substr(id.length-1)
    var firstChar=id.substr(0,1);
    警报(firstChar);
    如果(最后一个=“M”){
    如果(i-firstChar>0){
    警报(“正常”);
    }
    否则{
    警报(“不正常”);
    }
    }
    否则如果(最后一个==“D”){
    如果(j-firstChar>0){
    警报(“正常”);
    }
    否则{
    警报(“不正常”);
    }
    }
    }
    }

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

    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');
    

    根据您的请求将其作为答复发布

    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');
    

    我正在努力。一定要尽快更新possible@SorangwalaAbbasali谢谢M和D总是大写吗?好的,那么你今天肯定会得到答案。@Nischallin这个问题看起来不像正则表达式,所以我想你可能需要写if-then语句。这个怎么样?我正在做。一定要尽快更新possible@SorangwalaAbbasali谢谢M和D总是大写吗?好的,那么你今天肯定会得到答案。@Nischallin这个问题看起来不像正则表达式,所以我想你可能需要写if-then语句。这是怎么回事?你是用什么工具生成这个正则表达式还是你自己写的?你是用什么工具生成这个正则表达式还是你自己写的?其实没必要为此紧张。只需使用相同的脚本链接和从文本区域调用的函数,您就会得到答案。实际上,不必为此感到紧张。只要使用相同的脚本链接和从textArea调用的函数,您就会得到答案。