2015-04-27 2 views
4

Я пытаюсь проверить следующее для регулярного выражения, но не могу заставить его работать. Я использую regex101, но может ли кто-нибудь посоветовать, как исправить это или форматировать регулярное выражение?Regex Matching Variables

У меня есть массив - назовите его 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); 
} 
+0

Ваш вопрос ?? также, пожалуйста, отформатируйте свой код, чтобы получить справку. –

+0

Вопрос в том, что код, который я предоставил, был неправильным, но я не был уверен, как двигаться вперед, исправляя его. – djfkdjfkd39939

+0

Понял, я протестировал все поля, и он отлично работает, также я удалил цикл массива, который не имел особого смысла. –

ответ

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])); 
} 
+0

Это еще один вопрос, но я хотел бы указать вам на использование чего-то вроде ['filter'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter): * метод создает новый массив со всеми элементами, которые проходят тест, реализованный предоставленной функцией. * –

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 

DEMO

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}$/