Далее на странице...
На этой странице будет продолжена работа с предыдущей практической задачей, где, напомним, средствами Javascript проводилась проверка номера телефона, состоящего из семи цифр, разделенных дефисом.
Здесь задача будет усложнена, причем ДВАЖДЫ измениться ее условие.
Исходное условие: Написать функцию, которая получает номер телефона в виде: 123-4567.
Функция принимает или отвергает полученную комбинацию, которая должна состоять из семи цифр от 0 до 9, разделенных после третьей цифры дефисом.
Далее следуют 2 модификации исходного условия.
1-ый вариант модификации условия
Написать функцию, которая получает номер телефона в виде: 123-4567 или 1234567.
То есть комбинация должна состоять из семи цифр от 0 до 9, и она МОЖЕТ разделяться после третьей цифры дефисом (нужно учесть оба варианта).
2-ой вариант модификации условия
Функция получает комбинацию, состоящую из семи цифр от 0 до 9, которая МОЖЕТ В ЛЮБОМ МЕСТЕ разделяться дефисом.
Возможные варианты: 1234567, 1-234567, 12-34567 и т.д.
Для всех условий: в комбинации могут участвовать любые цифры от 0 до 9. Цифры могут повторяться, и их порядок не важен.
Решение №1 - для 1-го варианта условия
Решение №1 дополняет 3-ий вариант решения исходной задачи.
<script type="text/javascript">
function input(phone){
/* 1. Проверка на число символов: 7 или 8 */
if(phone.length < 7 || phone.length > 8){
return false;
}
for(i = 0; i < phone.length; i++){
/* 2. Если 4-ый символ Дефис, то всего символов должно быть 8. */
if(i === 3){
if(phone.length === 8 && phone.charAt(i) !== "-"){
return false;
}
/* 3. Если же число символов 7, то проверяем 4-ый символ на НЕ число */
else if(phone.length === 7 && isNaN(phone.charAt(i))){
return false;
}
}
/* 4. Проверка на НЕ число всех остальных символов */
else if(isNaN(phone.charAt(i))){
return false;
}
}
return phone;
}
var phone_N = prompt("Введите 7-ми значный номер из цифр от 0 до 9. При этом дефис может быть на 4-ой позиции");
var result = input(phone_N);
document.write(result);
</script>
Решение 1 - Дефис может быть на 4-ой позиции
Решение №2 - для 1-го варианта условия
Это решение дополняет 2-ой вариант решения исходной задачи.
<script type="text/javascript">
function input(phone){
/* 1. Проверка на число символов */
if (phone.length > 8 || phone.length < 7) {
return false;
}
/* Извлекаем за 2 шага все символы если их 7 и все кроме Дефиса, если их 8 */
var first = phone.substring(0,3);
var second = phone.substring(phone.length - 4);
/* Проверки на НЕ число 2-х групп символов */
if (isNaN(first) || isNaN(second)) {
return false;
}
if (phone.length === 8 && phone.charAt(3) === "-") {
return phone;
}
else if (phone.length === 7){
return phone;
}
else{
return false;
}
return phone;
}
var phone_N = prompt("Введите 7-ми значный номер из цифр от 0 до 9. При этом дефис может быть на 4-ой позиции");
var result = input(phone_N);
document.write(result);
</script>
Решение 2 - Дефис может быть на 4-ой позиции
Дефис может быть на любой позиции - 2-ой вариант условия
<script type="text/javascript">
function input(phone){
/* Проверка на число символов 7 или 8 */
if(phone.length != 7 && phone.length != 8){
return false;
}
/* Если число символов 7 - Проверка каждого на НЕ число */
if(phone.length == 7){
for(i = 0; i < phone.length; i++){
if(isNaN(phone.charAt(i))){
return false;
}
}
}
/* Возвращаем ложь, если введены 8 цифр, так как по условию их должно быть 7 или 7 и Дефис */
if(phone.length == 8 && isNaN(phone) == false){
return false;
}
if(phone.length == 8){
for(i = 0; i < phone.length; i++){
if(isNaN(phone.charAt(i)) && phone.charAt(i) !== "-"){
return false;/* Возвращаем ложь, если введены 7 цифр и вместо дефиса - другой символ */
}
/* Если среди символов есть Дефис... */
else if(phone.charAt(i) == "-"){
var first_group = phone.substring(0,i); /* Извлекаем группу символов до дефиса */
var second_group = phone.substring(i+1); /* Извлекаем группу символов после дефиса */
/*Далее проверка обеих групп символов на НЕ число */
if(isNaN(first_group) || isNaN(second_group)){
return false;
}
}
}
}
return phone;
}
var phone_N = prompt("Введите 7-ми значный номер из цифр от 0 до 9. Пробуйте в произвольном месте разделить их дефисом");
var result = input(phone_N);
document.write(result);
</script>
Дефис может быть на любой позиции
Эта задача может быть решена гораздо проще, если воспользоваться регулярными выражениями. Об этом на следующей странице.
Тогда может возникнуть вопрос: почему мы все это делали, создавали столь громоздкие решения?
Ответ прост: это тренировка полезна тем, кто учиться на практике работать с Javascript-кодом.