2015-06-09 2 views
0

Я пытаюсь проверить номер телефона. Однако это не работает. Почему это не работает?Я пытаюсь сформировать подтверждение номера телефона с помощью javascript

<html> 
<head> 
<script> 
    function validateForm() { 
     var phone1 = document.forms["myForm"]["phone"].value; 
     var phone2 = ^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$; 

     if (phone1.value.match(phone2)){ 
      return true; 
     }else{ 
      alert("Please enter a valid phone number"); 
      return false; 
     } 
    } 
</script> 
</head> 
<body> 

<form name="myForm" 
onsubmit="return validateForm()" method="post"> 

    <label for="phone">Phone:</label><input name="phone" id="phone" value="" placeholder="Zip..." type="text" onsubmit="return validateForm()"/> 

<button type="submit">Submit</button> 

</form> 

</body> 
</html> 

Это определенно что-то делать со сравнением значений в, если заявление, я просто не могу понять, как точно это сделать.

+0

Возможный дубликат http://stackoverflow.com/questions/26211225/validating-phone-numbers-using-javascript –

+0

Дайте ему выстрелили в здесь: http://www.regexr.com/ –

ответ

1

Ваш шаблон RegExp, базовый номер телефона, подтверждающий ваш шаблон, соответствует следующему порядку.

Посмотреть LIVE

JS

function validateForm() { 
    var re = /^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$/; 
    var phone1 = document.forms["myForm"]["phone"].value; 
    var m = re.exec(phone1); 
    if (m && m[0]){ 
     return true; 
    }else{ 
     alert("Please enter a valid phone number"); 
     return false; 
    } 
} 

HTML

<form name="myForm" onsubmit="return validateForm()" method="post"> 
    <label for="phone">Phone:</label> 
    <input name="phone" id="phone" value="" placeholder="Zip..." type="text" onsubmit="return validateForm()" /> 
    <button type="submit">Submit</button> 
</form> 

Использование должны использовать RegExp Pattern

^((\+?)(1?(\-?)?))(\d{3})(-|\s)?\d{3}(-|\s)?\d{4}$ 

enter image description here

+0

I» Мне просто интересно, зачем использовать 'exec()' здесь? Является ли он более совершенным, чем 'test()' или 'match()'? Кроме того, это регулярное выражение будет либо соответствовать полной строке, либо нет (из-за '^ $'), зачем использовать флаг 'g' и цикл while? – sainaen

+0

Здравствуйте @sainaen yeah correct no need use while while, потому что это только одно поле, я обновляю свой ответ. –

1
var phone2 = ^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$; 

это неправильный синтаксис регулярных выражений в JavaScript, он должен быть

var phone2 = /^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$/; 

Кроме того, вы получаете значение поля в два раза:

var phone1 = document.forms["myForm"]["phone"].value; 
//           ^
... 
if (phone1.value.match(phone2)) { 
//  ^`value` property here is not defined 

См this jsfiddle с фиксированным кодом.

1

Пользователи склонны вводить данные в текстовое поле так, как им нравится. Это раздражающий опыт, если форма запрещает им вводить детали определенным образом в текстовое поле. Лучше обобщить ваше регулярное выражение для таких шаблонов. @sainaen указал на ошибки, но ваше регулярное выражение все равно может потерпеть неудачу в следующих случаях.

+1-234-123-1234 
    +1234-123-1234 
    +1234123-1234 
    +12341231234 
    2341231234 
    434-123-1234 //with a space in the end or beginning 
Смежные вопросы