如何检查字段是否包含数字字符串或数组

How to check if a field contains a string of numbers or an array

用户可以在文本框中输入单独的序列号,即 1、2、3、4、5,或扫描输出格式为 [460, 3]、[123,321]、[900,123] 的二维码].

我需要做的是验证字段以检查二维码是否被扫描或用户是否输入了个人号码。假设它是一种格式或另一种格式 - 不能两者都是。

目前我有这个作为过滤器:

if(serialnumbers[0] != '['({
   //code for individual numbers
}
else{ //code for qr code arrays
}

基本上,我只是检查文本框值是否以括号开头,以查看它是数字列表还是数组列表,但我想知道是否有更好的方法来检查这个

试试这个:

if(serialnumbers.substr(0, 1) != '['){
    //code for individual numbers
}

您可以在此处查看有关此功能的更多信息:http://www.w3schools.com/jsref/jsref_substr.asp

你可以用这个正则表达式来做,它比它最初看起来更直接,因为它只是一个交替:

/^((\d+(,\s*|$))+|(\[\d+,\s*\d+\](,\s*|$))+)$/.test(input)

英文分类:

-从字符串开头 ^,消耗:

-(主要交替的第一部分 |number (\d+(,\s*|$))+

的逗号分隔列表

-OR(交替的第二部分)[number, number] (\[\d+,\s*\d+\](,\s*|$))+[=17 的逗号分隔列表=]

-紧接着输入结束 $.

https://regex101.com/r/Sr1zES/3

不确定为什么不能使用 typeof。 这就是我在这里要做的:

if(typeof serialnumbers != 'string'){
    //code for qr code arrays
}
else{
    //code for individual numbers
}

我的Fiddle更深入,看看吧! https://jsfiddle.net/zkqd1bre/3/

您可以使用一个正则表达式来完成此操作。

我已经发布了一个相关的正则表达式供您在这里探索和学习:http://regexr.com/3f4au

在代码中使用,这将是:

var individualCheck = /^(\d+)$|^((\d+,)+(\d+))$/;
var qrCheck = /^\[(\d+\,\d+)\]((\,\s*\[(\d+\,\d+)\])*)$/;

if (serialnumbers.match(individualCheck)){
    console.log("Individual Numbers Style");
    // code for individual numbers
} else if (serialnumbers.match(qrCheck)) { 
    console.log("QR Codes Style");
    //code for qr code arrays
} else {
    console.log("Validation failed");
    //code for invalid input
}

或者给你一个 JSFiddle:https://jsfiddle.net/kitkit/5Lxmz6dy/2/