首先,我是javascript和jQuery的新手。
我已经做了一些研究,人们说最好将白名单比黑名单做。
所以我想到了只允许粘贴/扫描/写入textarea特定的产品代码,例如:
7AHT182019Y00867F03281P
7AHT182019Y00293F0281P
7AHT182019Y00672F021543P
18是星期,2019是年,产品编号867,产品数量3281。
在扫描时,两次将产品代码写入或粘贴到文本区域中,都会发出警告7AHT182019Y00293F0281P this product code already exists in textarea
。
我已经尝试过过滤,indexOf和每个事件处理程序。
首先将textarea值转换为数组并将其拆分并使用indexOf处理程序。
此代码表示10位数字必须是数字。它必须以7,8或9开头。但是我想更具体一点:
jQuery(document).ready(function() {
validateNumbers();
$('#mobile_numbers').keyup(function() {
if (/\D/g.test(this.value)) {
this.value = this.value.replace(/\D/g, '');
}
this.value = this.value
.replace(/[\n\r]+/g, "")
.replace(/(.{10})/g, "$1\n");
validateNumbers();
});
function validateNumbers() {
var value = $("#mobile_numbers").val();
var numbersArray = value.split('\n');
var validNumbers = [];
var duplicateNumbers = [];
var inValidNumbers = [];
// remove empty elements
var index = numbersArray.indexOf("");
while(index !== -1)
{
numbersArray.splice(index,1);
index = numbersArray.indexOf("");
}
for (var $i = 0; $i < numbersArray.length; $i++) {
var number = numbersArray[$i];
if (validNumbers.indexOf(number) !== -1 || inValidNumbers.indexOf(number) !== -1) {
duplicateNumbers.push(number);
} else if (number.match(/[789]\d{9}/)) {
validNumbers.push(number);
} else {
inValidNumbers.push(number);
}
}
$("#total").text(numbersArray.length);
$("#duplicate").text(duplicateNumbers.length);
$("#valid").text(validNumbers.length);
$("#invalid").text(inValidNumbers.length);
}
});
它应以7AHT
开头。周应为18
,年应为2019Y
。
00867F
是产品代码,它也可以是特定的,因为它不会更改。
唯一更改的是产品数量:03281P
。
如果您第二次尝试扫描同一产品,它应该警告它为重复产品,并且不应将此产品代码添加到textarea。
答案 0 :(得分:1)
如果您想确定文本是否以特定字符串(7AHT182019Y00672F)开头,则可以使用正则表达式:
var res = number.match(/^7AHT182019Y00672F([^\s]+)/);
如果res不为空,则匹配,结果将包含整数和固定部分后紧跟字符串的部分,例如7AHT182019Y00672F1234567,1234567,其中1234567是非固定部分。 U可以简单地用定界符,:
对其进行拆分。var parts = res.split(",");
var fixed = parts[0];
var nonfixed = parts[1];
或仅查找搜索字符串的位置:
number.indexOf("7AHT182019Y00672F") === 0
位置0表示文本在位置0上包含搜索字符串,因此文本以此字符串开头。