Проверьте число от 10 до 11 символов в длину - PullRequest
2 голосов
/ 22 марта 2010

Я использую JavaScript (и PHP) для проверки простой формы с полем номера телефона. У меня это работает нормально, проверяя, что поле имеет только 10 символов, но я действительно хочу проверить, имеет ли поле от 10 до 11 символов.

Причина в том, что некоторые люди набирают цифры примерно так: 1 555 555 5555, а некоторые люди делают это 555 555 5555.

Вот что у меня работает, чтобы проверить, равна ли длина 10:

        if (!(stripped.length == 10)) {
            alert("Please enter a valid US phone number.")
            return false
        } 

Ответы [ 4 ]

2 голосов
/ 22 марта 2010

Хорошо, чтобы сделать то, что вы просите:

if (stripped.length != 10 && stripped.length != 11) {
    alert("Please enter a valid US phone number.")
    return false
} 

Тем не менее, вы можете рассмотреть возможность использования регулярных выражений для проверки телефонных номеров, поскольку они могут легко проверять большое количество условий.

Заимствование у RegEx Buddy (что я настоятельно рекомендую, поскольку оно поможет вам анализировать и понимать регулярные выражения):

var phoneRegex = /\(?\b[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}\b/;​​

var phone = '3334445555';

if(!phone.match(phoneRegex)){
    alert('please enter a valid phone number');
}
​

Совпадения 3334445555, 333.444.5555, 333-444-5555, 333 444 5555, (333) 444 5555 и все их комбинации.

EDIT

@ pawel делает хорошее замечание. Лучший способ проверить это сначала удалить все символы, кроме цифр. Затем убедитесь, что у вас есть правильное количество цифр, затем сохраните этот раздельный, единый номер на сервере. Регулярное выражение идеально подходит только для поиска действительных телефонных номеров, которые скрываются в большем блоке текста. Это действительно не разумный выбор для этого ... упс:)

2 голосов
/ 22 марта 2010

Простой ответ - добавить чек в ваш if:

if (!(stripped.length == 10 || stripped.length == 11)) { ... }
1 голос
/ 22 марта 2010

Ну, вы, вероятно, действительно хотите либо 10 символов, либо 1, а затем 10 символов.

if (!(stripped.length === 10 || stripped.length === 11 && stripped.charAt(0) === "1")) {
  // invalid...
}
0 голосов
/ 22 марта 2010

Я понял, нужно было просто обновить JS 101. Я на самом деле пытался использовать ИЛИ || оператор, но сделал это так 10||11, который не работал.

Это работает:

if (!(stripped.length == 10 || stripped.length == 11)) {
    alert("Please enter a valid US phone number.")
    return false
} 
...