验证具有前两位数字和一个字母的字段
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
【讨论】:
你是用什么工具来生成这个正则表达式还是你自己写的?以上是关于验证具有前两位数字和一个字母的字段的主要内容,如果未能解决你的问题,请参考以下文章