• Страница 1 из 1
  • 1
Модератор форума: JonMagon  
Сообщество uCoz » Вебмастеру » JavaScript, Flash и прочие технологии » JavaScript » Помогите разобратся с циклом FOR в JS
Помогите разобратся с циклом FOR в JS
Rad_van_Cor
Сообщений: 1179
Репутация: 437

Сообщение # 1 | 11:42:53
Всем привет, короче решил я начать учить язык JavaScript. Потом возьмусь и за jQuery, но это потом.
Так вот, набросал небольшую проверку, которая проверяет, слово занесённое в переменную name.
Если в слове есть английские буквы, скрипт выводит что эти буквы запрещены.

Вот сам скрипт:

Код
var name = "Сtаниsлав"
for (var i = 0; i < name.length; i++) {
    if (name.charCodeAt(i) < 1040 || name.charCodeAt(i) > 1103) {
    var error = name.charAt(i);
    document.write ("Символ <b style='color:#ff0000;'>" + error + "</b> запрещён!<br> ");
    }      
}


В нашем случае в переменной есть 2 англ буквы "t" и "s"
И скрипт выведет это:

Код
Символ t запрещён!
Символ s запрещён!


Вопрос в том, как сделать так, что бы скрипт выводил только список букв в ряд, а надпись "символ запрещён" писалась один раз.
Короче что бы выводилось так:

Код
Символы: t // s запрещены!


Только просьба показать решение именно на чисто JS без jQuery.

Сообщение отредактировал Rad_van_Cor - Вторник, 18 Мар 2014, 11:44:35
Inquisitоr
Сообщений: 900
Репутация: 338

Сообщение # 2 | 12:13:44
Код
var name = "Сtаниsлав"
var error = "";
for (var i = 0; i < name.length; i++) {
      if (name.charCodeAt(i) < 1040 || name.charCodeAt(i) > 1103) {
      var error += name.charAt(i)+", ";
        
      }
}

if(error!==""){
document.write ("Символы <b style='color:#ff0000;'>" + error + "</b> запрещены!<br> ");
}


Перед циклом включаем переменную, содержимое которой: пустое.
Потом циклом добавляем в эту переменную результат выполнения цикла.

Учитесь читать, читая - вчитывайтесь, вчитываясь - вдумывайтесь, вдумываясь - понимайте, поняв - делайте. ©
Сообщение отредактировал Inkvizitor - Вторник, 18 Мар 2014, 12:14:17
Rad_van_Cor
Сообщений: 1179
Репутация: 437

Сообщение # 3 | 12:25:42
Inkvizitor, спасибо, только что-то не работает. Демо

Сообщение отредактировал Rad_van_Cor - Вторник, 18 Мар 2014, 12:25:59
Inquisitоr
Сообщений: 900
Репутация: 338

Сообщение # 4 | 12:26:26
Потому что это сырой пример, накалякал держа ноут на коленках)
Чуть освобожусь - напишу нормально.

Учитесь читать, читая - вчитывайтесь, вчитываясь - вдумывайтесь, вдумываясь - понимайте, поняв - делайте. ©
Rad_van_Cor
Сообщений: 1179
Репутация: 437

Сообщение # 5 | 12:28:42
Inkvizitor, а, понял, ок, буду ждать)
И по возможности закомментируйте ваши действия в скрипте, что бы чайнику было понятнее)

там в цикле ещё ж вроде нужно получить данные, return true или чё-то типа того прописать после условия.
Хотя хрен знает)

Сообщение отредактировал Rad_van_Cor - Вторник, 18 Мар 2014, 12:38:28
Inquisitоr
Сообщений: 900
Репутация: 338

Сообщение # 6 | 12:47:32
Код
<script>
var name = "Сtаниsлав";
var error = ""; /* Устанавливаем переменную */
for (var i = 0; i < name.length; i++) {
      if (name.charCodeAt(i) < 1040 || name.charCodeAt(i) > 1103) {
      error += name.charAt(i)+", "; /* Добавляем в конец строки результат ступени цикла, в конце каждого результата: запятая и пробел */
      }        
}

/* В случае если совпадения найдены, выводим строку, удаляя пробел и запятую, которые стоят в конце */
if(error){
document.write ("Символы: <b style='color:#ff0000;'>" + error.substring(0, error.length - 2) + "</b> запрещены!<br> ");
}
</script>


Вроде должен работать.

Учитесь читать, читая - вчитывайтесь, вчитываясь - вдумывайтесь, вдумываясь - понимайте, поняв - делайте. ©
Сообщение отредактировал Inkvizitor - Вторник, 18 Мар 2014, 14:03:06
Rad_van_Cor
Сообщений: 1179
Репутация: 437

Сообщение # 7 | 18:25:06
Inkvizitor, да, теперь работает, спасибо большое. Правда тяжело воспринимается пока этот код, столько всего)
Надеюсь со временем это пройдёт, и в моей голове тоже будут генерироваться решения не только для таких задач, но и для более сложных)

JonMagon
Сообщений: 2291
Репутация: 1828

Сообщение # 8 | 18:03:59
Inkvizitor,
Цитата Inkvizitor ()
error.substring(0, error.length - 2)

Не очень приятна такая конструкция.
Цитата Inkvizitor ()
error += name.charAt(i)+", "; /* Добавляем в конец строки результат ступени цикла, в конце каждого результата: запятая и пробел */

Здесь можно бы использовать тернарку.
Код
error += (error.length == 0 ? "" : ", ") + name.charAt(i);

Тогда и в выводе информации можно использовать прямо
Код
document.write("Символы: <b style='color:#ff0000;'>" + error + "</b> запрещены!<br> ");


Любой код всегда лучше, если в нем нет костылей.

Не оказываю поддержку посредством ЛС/ICQ/Skype/AIM/XMPP/E-mail.
Rad_van_Cor
Сообщений: 1179
Репутация: 437

Сообщение # 9 | 00:53:55
JonMagon, ништяк, спасибо)

Nexxus
Сообщений: 289
Репутация: 66

Сообщение # 10 | 12:14:00
Почему не объявить error как массив и не складывать в него ошибки?
M-Brook
Сообщений: 215
Репутация: 75

Сообщение # 11 | 14:53:52
Nexxus, хоть умный человек))))

Спасибо = "+" в репутацию
Любые вопросы по:
- Javascript, jQuery, HTML, CSS
- Верстке макетов и установке их на сайты
- Нестандартным решениям
Сообщество uCoz » Вебмастеру » JavaScript, Flash и прочие технологии » JavaScript » Помогите разобратся с циклом FOR в JS
  • Страница 1 из 1
  • 1
Поиск: