2017-01-19 3 views
0

Пользователь может вводить в текстовое поле либо отдельные серийные номера, то есть 1,2,3,4,5, либо сканировать QR-коды, которые выводятся в формате [460, 3], [123, 321], [900, 123].Как проверить, содержит ли поле строку чисел или массив

Что мне нужно сделать, это проверить это поле, чтобы проверить, проверен ли QR-код или вводится ли пользователь в отдельных номерах. Предположим, что это либо один формат, либо другой - он не может быть обоим.

В настоящее время у меня есть это в качестве фильтра:

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

В принципе, я просто проверка, если значение текстового поля начинается с кронштейном, чтобы увидеть, если его список номеров или список массивов, но я интересно, если есть лучший способ проверить это

+0

Могли сценарий использования typeof. –

ответ

0

Вы можете сделать это с помощью одного регулярного выражения.

Я отправил соответствующее RegEx для вас, чтобы исследовать и учиться здесь: 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/

+0

спасибо за демо. Он работает, если сканируется только один QR-код, но если несколько сканируются, то он не будет работать. –

+0

Извинения. Крис. Я изначально не осознавал, что вы также хотели бы предоставить неограниченный список QR-кодов. Я обновил свой ответ, чтобы разрешить это с помощью расширенной проверки QRCode, а также обновил ссылки RegExr и JSFiddle. – Kit

0

вы могли бы сделать это с этим регулярным выражением, которое более straigtforward, чем первый выглядит как это только один Чередование:

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

разбивка на английском:

-из начало строки ^, потреблять:

- (первая часть основного чередованием |) запятыми список числа(\d+(,\s*|$))+

- ИЛИ (вторая часть чередованием) разделенные запятой список [номер, номер](\[\d+,\s*\d+\](,\s*|$))+

-followed сразу к концу ввода $.

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

1

Не знаю, почему вы не смогли бы использовать TypeOf. Это то, что я хотел бы сделать здесь:

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

Мой Fiddle идет больше в глубину, проверить это! https://jsfiddle.net/zkqd1bre/3/

+0

Поле является текстовым полем, поэтому оно всегда является строкой.У меня уже есть способ преобразования строки в массив чисел или массив массивов, но, похоже, не может найти лучшего способа проверить, есть ли в нем строка чисел или строка массивов. –

Смежные вопросы