2013-03-24 3 views
2

Мне нужно проверить австралийские телефонные номера (например, 02[3-9]\d{7} или 07[3-9]\d{7} или 04[\d]{8}) в JavaScript.Подтвердить (австралийский) номер телефона в Javascript

Требования:

  • должно быть 10 цифр
  • нет запятых
  • нет черточки
  • нет + перед
  • должны начинаться с 0

В настоящее время Момент, который я могу подтвердить поля и адрес электронной почты, но я хочу добавить подтверждение номера телефона.

<html> 
<head> 

<script type="text/javascript"> 
function validateForm() { 
var x=document.forms["form3"]["name"].value; 
if (x==null || x=="") { 
    alert("Name must be filled out"); 
    return false; 
} 
var s=document.forms["form3"]["phone"].value; 
if (s==null || s=="") { 
    alert("Please Enter your Phone or Mobile Number - Preferably Phone Number"); 
    return false; 
} 
var s=document.forms["form3"]["email"].value; 
if (s==null || s=="") { 
    alert("Please Enter a valid email address"); 
    return false; 
} 
var k=document.forms["form3"]["email"].value; 
var atpos=k.indexOf("@"); 
var dotpos=k.lastIndexOf("."); 
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=k.length) { 
    alert("Email Address is Not Valid. Please provide your correct email address."); 
    return false; 
} 
} 
</script> 
</head> 
<body> 

<form action="/thank-you.php" name="form3" method="post" onsubmit="return validateForm();" > 
Your name* <input type="text" name="name" />  
Phone number* <input type="text" name="phone" /> 
Email* <input type="text" name="email" /> 
<input type="submit" value="sumbit" name="submit" class="button" onclick="javascript:return validateMyForm();" /><input type="reset" value="Reset" class="resetbutton" /> 
</form> 

</body> 
</html> 

Может кто-нибудь помочь?

+1

Обратите внимание, что ВЫ НЕ МОЖЕТЕ ПОЛУЧИТЬ данные клиента (даже не проверенные на стороне клиента данные) –

+2

@ kaᵠ Лучше иметь проверку на стороне клиента, а также проверку на стороне сервера, потому что если проверка на стороне клиента не удалась, это просто не будет собирается отправить, который может сэкономить HTTP-запрос. – Jason

+1

@EnglishMaster И улучшите пользовательский интерфейс, так как (настоящий) пользователь предпочел бы знать любые ошибки прямо там и тогда, а не после того, как сайт занял время, чтобы обработать страницу и вернуть результаты. –

ответ

8

Вот регулярное выражение, которое я рекомендую

var pattern = /^0[0-8]\d{8}$/g; 

Так вход должен начинаться с 0, а затем цифры, и она должна быть одна между 0-8. Затем он должен иметь еще 8 цифр.

Правильные примеры номер телефона:

0010293999 (ок)

0110293999 (ок)

0210293999 (ок)

0910293999 (Нету)

// Реализация

........ 
var phoneNumber =document.forms["form3"]["phone"].value; 
var phonePattern = /^0[0-8]\d{8}$/g; 
//phone number is not valid. Please notice that you don't need to check if it's empty or null since Regex checks it for you anyways 
if (!phoneNumber.test(phonePattern)) 
    { 
    alert("Please Enter your Phone or Mobile Number - Preferably Phone Number"); 
    return false; 
    } 
.......... 

---- Редактирование

........ 
    var phoneNumber =document.forms["form3"]["phone"].value; 
    var phonePattern = /^0[0-8]\d{8}$/g; 
    //phone number is not valid. Please notice that you don't need to check if it's empty or null since Regex checks it for you anyways 
    if (!phonePattern.test(phoneNumber)) 
     { 
     alert("Please Enter your Phone or Mobile Number - Preferably Phone Number"); 
     return false; 
     } 
    .......... 
+0

Nah не работает. просто добавил ваш код, но он отправляет веб-сообщение без проверки всех полей. – Webnerdoz

+0

Я думал, вы спрашиваете о регулярном выражении для phonenumber? – Jason

+2

Прошу прощения, была небольшая ошибка из кода примера. это должно быть! phonePattern.test (phoneNumber) вместо! phoneNumber.test (phonePattern) – Jason

0

Взгляните на Javascript RegExp Object и RegExp test().

var patt = /04[\d]{8}/g; // Shorthand for RegExp object 

var phoneNumber1 = '0412345678'; 
var result1 = patt.test(phoneNumber1); // result1 is true 

var phoneNumber2 = 'abc'; 
var result2 = patt.test(phoneNumber2); // result2 is false 
0

Вы также можете использовать нужный шаблон.

Я никогда не использовал его раньше, но это выглядит следующим образом:

<input type="text" 
    id="phoneNumber" 
    title="Phone numbers must be 10 digits and start with 0." 
    required pattern="0[::digit::]{10}" 
/> 

// It's late, no idea if that's a valid regex or if works with POSIX. 

Смотрите эту HTML5ROCKS статью для получения дополнительной информации: http://www.html5rocks.com/en/tutorials/forms/html5forms/#toc-validation

+0

спасибо. Это работает как шарм. Проблема в том, что сообщение об ошибке для телефонного поля отличается от других сообщений об ошибках JavaScript ... – Webnerdoz

+0

На второй взгляд, это не работает при заполнении формы через IE-браузеры. – Webnerdoz

+1

Нет ничего особенного в 'required pattern ='. Это всего лишь два атрибута: 'pattern =' и 'required'. – Eric

4

Благодаря Paul Ferrett для этого (PHP не JS, но регулярное выражение должно переводить):

<?php 
function validate_phone($number) { 
    $number = preg_replace('/[^\d]/', '', $number); 
    return preg_match('/^(0(2|3|4|7|8))?\d{8}$/', $number) 
    || preg_match('/^1(3|8)00\d{6}$/', $number) 
    || preg_match('/^13\d{4}$/', $number); 
} 

NB: "MIT License"

Смежные вопросы