Javascript 检查副本&;使用jQuery在Textarea中输入有效数字

Javascript 检查副本&;使用jQuery在Textarea中输入有效数字,javascript,jquery,html,validation,Javascript,Jquery,Html,Validation,我正在一个textarea上开发一个jQuery验证,其中包含 逐行输入10位移动电话号码 我使用此代码来确保每10位新行出现一次 $('#mobile_numbers').keyup(function () { if (/\D/g.test(this.value)) { this.value = this.value.replace(/\D/g, ''); } this.value = this.va

我正在一个textarea上开发一个jQuery验证,其中包含 逐行输入10位移动电话号码

我使用此代码来确保每10位新行出现一次

 $('#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");
    });
上述代码还强制只输入numric值,并且在每10位之后添加新行

一切都很好,但我陷入了

1) 我正在检查手机号码是否有效 条件是它应该从7或8或9开始,每行包含10位数字,如果不是,我将删除它

2) 此外,我还尝试使用jquery计算textarea中数据的重复数和有效数,并将输出显示为HTML

Eg: (User type in text area)
7777777777
8888888888
9999999999
7777777776
6601145591 // Invalid (should start with 7/8/9 & 10 digit)
5566887744 //Invalid
664433     //Invalid
8888888886
9999999996
9999999996
8888888886

Output:
<h1>Total number: 11<h1>
<h1>Duplicate number: 2<h1>
<h1>Valid number: 6<h1>
Eg:(用户在文本区域中键入)
7777777777
8888888888
9999999999
7777777776
6601145591//无效(应以7/8/9和10位数字开头)
5566887744//无效
664433//无效
8888888886
9999999996
9999999996
8888888886
输出:
总数:11
重复号码:2
有效号码:6
我不知道我正在尝试的事情是否可能。 如果可能的话,如何做到这一点, 如果我能得到文档链接,我会自己做。 但我害怕编写代码,因为我是一名后端开发人员,我正在用PHP检查所有内容,但我想确保客户端的验证也使用jQuery


提前感谢。

以下是您可以实现此目标的方法:

        $('#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);
        }
$(“#手机号码”).keyup(函数(){
如果(/\D/g.test(此值)){
this.value=this.value.replace(/\D/g');
}
this.value=this.value
.replace(/[\n\r]+/g,“”)
。取代(/({10})/g,“$1\n”);
验证枚举器();
});
函数validateEnumbers(){
var值=$(“#移动电话号码”).val();
var numbersArray=value.split('\n');
var ValidNumber=[];
var DuplicateNumber=[];
var inValidNumbers=[];
//删除空元素
var指数=NumberArray.indexOf(“”);
而(索引!=-1)
{
编号排列拼接(索引1);
索引=numbersArray.indexOf(“”);
}
对于(变量$i=0;$i
完整工作演示:

如果你想使用电话号码,那么谷歌
libphonenumber
是最好的解决方案。它确实支持JavaScript和Java,下面是一个例子

图书馆链接:

代码示例:

var phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance();
var number = phoneUtil.parseAndKeepRawInput(phoneNumber, "US");
var isValidNumber = phoneUtil.isValidNumber(number);
if (isValidNumber) {
    var formattedNumber = phoneUtil.format(number,  18n.phonenumbers.PhoneNumberFormat.E164);
    return formattedNumber;
}

是否需要使用Textarea?如果不是的话,这可能会容易得多。谢谢:)但它也可以将新行光标作为总数计算。是的。如果文本区域中的最后一个字符是\n,则
numbersArray
中的最后一个元素将是空字符串,但它当然将作为元素计算。您可以通过在循环中使用
splice
来检查和删除空值:
if(!number.length){numbersArray.splice($i,1)}
同样的问题与无效的号码有关。我刚刚编辑了答案和plunk以包含删除排除空电话号码的代码。