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

Posted

技术标签:

【中文标题】验证具有前两位数字和一个字母的字段【英文标题】: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 文本字段的格式是这样的::

    如果最后一个字符是字母,那么它必须是 '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" />

【问题讨论】:

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

【讨论】:

你是用什么工具来生成这个正则表达式还是你自己写的?

以上是关于验证具有前两位数字和一个字母的字段的主要内容,如果未能解决你的问题,请参考以下文章

js验证只能输入字母,数字或字母数字组合正则表达式

常用数字与字母的正则表达式

常用数字字母组合正则表达式

js验证密码的正则表达式

Laravel 表单验证集规则,例如前两个字符是字母,后四个字符是数字,例如 AB1234

如何在 Hadoop 中编写 HQL 表达式以验证特定格式的字母数字字段的格式,例如 X9999