2016-04-23 4 views
0

Я пытаюсь ввести следующее значение «f + 11111111111», и мой код не отображает сообщение об ошибке. Я попытался удалить условие regex2, а затем он сработал. Но как получилось? Это условие И, почему оно действует, как оператор OR?Javascript regex не дает сообщения об ошибке, когда он должен

function validatePhone() 
{ 
var phone = document.getElementById("phone").value; 

var regex1 =/^[\+\d][\s(\-\d][\s()\-\d]{8,}/g; 
var regex2 = /\D*(\d\D*){11}/g; 

    if (!phone.match(regex1) && !phone.match(regex2)) { 
     producePrompt("Error", "comment_phone_prompt"); 
     return false; 
    } 
} 

function producePrompt(message, promptLocation) 
{ 
    document.getElementById(promptLocation).innerHTML = message; 
} 
+1

regex2 соответствует вашему входу, и вы используете отрицание '!' В условии if * (это, очевидно, оценивается как false) *. Поскольку никто не знает, что вы пытаетесь сделать, вам больше не поможет. –

+0

@CasimiretHippolyte да, глупая ошибка. Необходимо сделать перерыв. Благодарю. UPD: Вы уже достаточно помогли. – kulan

+0

Используя '&&' с '!', Оба выражения должны не совпадать, чтобы ввести блок 'if'. Когда только один не подходит ('true && false'), общий результат -« false », пропускающий блок. Вероятно, вы захотите использовать '||' вместо '!' ("* Если они не совпадают, вызывают ошибку *"). –

ответ

0

Ваше второе регулярное выражение /\D*(\d\D*){11}/g соответствует заданной строке f+11111111111 и, следовательно, все условие вычисляется в false. Вы можете визуализировать свои регулярные выражения, используя regexper.com.

Я не уверен, что вы пытаетесь сделать, но помните, что даже эта строка соответствует второму регулярному выражению: 'f+1dsadsadasda123131231dsdadai-094i-)@)#(@)_(#_!' Это то, что вы хотите?

0

Второе регулярное выражение соответствует всем. Одиночного регулярного выражения достаточно.

function validatePhone() { 
     var phone = document.getElementById("phone").value; 

     var regex1 = /^(\+\d)?(\(|-)?\d{3}(\)|-)?\d{3}-?\d{4}$/; 
     //match +1-800-123-45678, (555)123-4567, and so on 
     if (!regex1.test(phone)){ 
      producePrompt("Error", "comment_phone_prompt"); 
      return false; 
     } 
     return true;//both sides should return 
    } 
Смежные вопросы