«Единственный способ творить великие дела – это любить то, что ты делаешь»
JavaScript

Игра на «Морской Бой» на JavaScript: Простая Игра и Игра для Двоих


На этой странице будет продолжена работа с предыдущей практической задачей, где, напомним, средствами 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-кодом.

Отзывы и комментарии:

Комментариев нет...

Оставить отзыв:

Ваше Имя:

Текст комментария:

Ответьте на вопрос:

Сколько дней в Високосном году?


Задачи по JavaScript
Последние заметки
Популярные заметки