Javascript表单验证|设置一个特定的输入格式

问题描述:

我的工作有要求用户只有输入任何的以下三个选项输入字段项目:Javascript表单验证|设置一个特定的输入格式

  1. 号码,例如150
  2. 号码开头一个字母(其中必须是N,不区分大小写)等N150
  3. 与一个字母(必须是N结束号码,不区分大小写)等150N

任何其他值,如:

  • 150X将返回错误信息wrong input
  • X150将返回wrong input
  • 1N50将返回wrong position

正确办法做到这一点是要有效数字数组,然后检查如果给定的文本存在于你的数组中。
例如:

var validNumbers = [ 150, N150, 150N ]; 
if (validNumbers.indexOf(parseInt(num, 10)) >=0) { 
    //Match 
} 

你需要对IE的indexOf功能:

if (!Array.prototype.indexOf) { 
Array.prototype.indexOf = function(needle) { 
    for(var i = 0; i < this.length; i++) { 
     if(this[i] === needle) { 
      return i; 
     } 
    } 
    return -1; 
}; 
} 
+0

的150,150N和N150只是一个例子,用户可以输入不同的数字,如2000,1657N,N8等 –

+0

所以你可以编辑以匹配你想要的!我刚给你一个可能的解决方案! –

+0

Rigth,从(001 - 999)(N001 - N999)(001N-999N)开始的数字,只有3000个值的数组:/。顺便说一句,* N130 *不是#正确的#... –

检查这个答案:

Regular expression to match a number range in JavaScript

和调整你的需求,你可以通过添加正则表达式部分来创建接受值如:在末尾或开头轻松添加“N”-N150 -150N -130N -N130

+0

在另一个城堡没有答案*(仅链接)不是答案... –

非regexapproach(只是为了说明为什么正则表达式是有用):

function test(value){ 
//convert to array 
value=value.split(""); 
//check the number 
function isnumber(num){ 
    return num.every(n=>"1234567890".includes(n)); 
} 

//weve got three possibilities: 
    //150 
    if(isnumber(value)) return true; 

    //N150 
    var [n,...rest]=value; 
    if(n==="N" && isnumber(rest)) return true; 

    //150N 
    var n=value.pop(); 
    return n==="N" && isnumber(value); 
} 

http://jsbin.com/kafivecedi/edit?console