正则表达式匹配变量

4

我试图使用正则表达式测试以下内容,但无法使其工作。 我正在使用regex101,但是否有人可以建议如何更正此问题或格式化正则表达式?

我有一个数组 - 将其称为arr [],其中有5个元素。

  • arr [0] 需要是变量字母数量的单词名称。
  • arr [1] 需要是一个单词或两个单词的名称(即变量字母数量或变量字母数量后跟一个空格字符再后跟另一个变量字母数量)
  • arr [2] 需要连续10个数字(例如123432908623,也可以以0开头)
  • arr [3] 需要是带有以下格式的社会保障号码 - 3位数字后跟空格,然后是2位数字,然后是4位数字(例如123 45 6848)
  • arr [4] 需要是带有区号的电话号码,其格式为:括号后跟3个数字,后跟空格,然后是括号后跟3个数字,再后跟空格,然后是括号后跟4个数字(例如(123)456 1234)

这里是我开始写的一些代码:

for(var i = 0; i<arr.length; i++){

    var str1 = arr[i][0];
    var pat1 = /^\s'w+?'/;
    var first = pat1.test(str1);
    console.log(first);

    var str2 = arr[i][1];
    var pat2 = /\s'\w+(?:\s\w+)?'/;
    var second = pat2.test(str2);
    console.log(second);

    var str3 = arr[i][2];
    var pat3 = /?:\d{10}$/;
    var third = pat3.test(str3);
    console.log(third);

    var str4 = arr[i][3];
    var pat4 = /?:\d{3}\s){2}\d{4}'\s\]$/;
    var fourth = pat4.test(str4);
    console.log(fourth);

    var str5 = arr[i][4];
    var pat5 = /\s'(?:\d{3}\s){3}\d{4})'\s\/;
    var fifth = pat5.test(str5);
    console.log(fifth);
}

你有问题吗?请格式化你的代码以便获得帮助。 - Pedro Lobito
问题在于我提供的代码不正确,但我不确定如何继续纠正它。 - djfkdjfkd39939
明白了,我已经测试了所有字段,它完美地工作了。此外,我还删除了那个没有太多意义的数组循环。 - Pedro Lobito
3个回答

2

您的代码似乎有相当多的拼写错误。此外,这看起来像一个问题集的问题,所以我将把它留给您作为进一步的练习,以理解纠正的内容。不过,您已经走在了正确的轨道上:

var pat1 = /^[a-z]+$/i;
var pat2 = /^[a-z]+(?: [a-z]+)?$/i;
var pat3 = /^\d{10}$/;
var pat4 = /^\d{3} \d{2} \d{4}$/;
var pat5 = /^\(\d{3}\) \d{3} \d{4}$/;

for (var i = 0; i < arr.length; i++) {
  console.log(pat1.test(arr[i][0]));
  console.log(pat2.test(arr[i][1]));
  console.log(pat3.test(arr[i][2]));
  console.log(pat4.test(arr[i][3]));
  console.log(pat5.test(arr[i][4]));
}

这是另一个问题,但我会建议您使用类似 filter 的东西:该方法通过由提供的函数实现的测试来创建一个新数组,其中包含所有元素。 - Jason Cust

1
这应该可以做到:

var arr =  ["Louis", "Louis Python", "1234567890", "123 45 6848", "(123) 456 1234"];


    var str1 = arr[0];
    var pat1 = /^[a-z]+$/i;
    var first = pat1.test(str1);
    console.log(first);

    var str2 = arr[1];
    var pat2 =/^[a-z]+(?:\s[a-z]+)?$/i;
    var second = pat2.test(str2);
    console.log(second);

    var str3 = arr[2];
    var pat3 = /^[\d]{10}$/;
    var third = pat3.test(str3);
    console.log(third);

    var str4 = arr[3];
    var pat4 = /^[\d]{3}\s[\d]{2}\s[\d]{4}$/;
    var fourth = pat4.test(str4);
    console.log(fourth);

    var str5 = arr[4];
    var pat5 = /^\([\d]{3}\)\s[\d]{3}\s[\d]{4}$/;
    var fifth = pat5.test(str5);
    console.log(fifth);

输出:

true
true
true
true
true

演示

http://codepen.io/anon/pen/gpboLr


1

我认为在全局格式下使用正则表达式更有趣,可以轻松维护...

http://jsfiddle.net/579j2po1/1

var pat1 = /^[a-z]+$/i;
var pat2 = /^[a-z]+( +[a-z]+)?$/i
var pat3 = /^[0-9]{10}$/;
var pat4 = /^[0-9]{3} [0-9]{2} [0-9]{4}$/
var pat5 = /^\([0-9]{3}\) [0-9]{3} [0-9]{4}$/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接