Просмотр полной версии : Проверяет только по первой букве, а не по всему слову
muhactive
10.04.2008, 16:08
Здравствуйте!
Писал функцию определяющую русские ли слова содержит строка.
Но почемута она проверяет только по первой букве а не повсему слову.
function registration(imya){
if(typeof imya=="string" && imya!="") {
for(i=0; i<=imya.length; i++){
if (imya.charAt(i)>="А" && imya.charAt(i)<="я"){
return true;
}
else {
return false;
}
}
}
}
trace(registration("ПятнUWEFC"));
На запрос выдаёт TRUE хотя с 5 символа пошли уже не русские буквы.
Подскажите пожалуйста почему цикл не срабатывает правильно:umnik2: Заранее благодарен!
chingachgoog
10.04.2008, 16:25
Потомучто после первой же буквы срабатывает return
muhactive
10.04.2008, 16:41
не мог бы ты исправить ошибку? а то что то у меня не выходит! Куда return переставить?
muhactive получает плюс за глобальное игнорирование запятых.
crazyone
10.04.2008, 17:01
А что должна выдавать твоя функция, когда и кирилица и латиница в строке?
chingachgoog
10.04.2008, 17:05
Если грубо, то можно переставить return true в самый конец функции
muhactive
10.04.2008, 17:10
false
crazyone
10.04.2008, 17:18
Как-то так поменять:
function registration(imya){
if(typeof imya=="string" && imya!="") {
for(i=0; i<imya.length; i++){
if (!(imya.charAt(i)>="А" && imya.charAt(i)<="я")){
return false;
}
}
return true;
}
}
trace(registration("ПятнUWEFC"));
muhactive
10.04.2008, 17:24
Так работает. Спасибо!!!
Только я так и не понял почему тогда моя функция не работала. Ведь ты просто зделал "наоборот".
Tochilin
10.04.2008, 17:29
function russ_text(str) {
/* Для начала нужно проверить, является ли переданный параметр строкой.
Также он не должен быть пустой строкой - поле ввода должно быть заполнено.*/
if (typeof str == "string" && str != "") {
/*Если предыдущие условия выполнены, запускаем цикл, при помощи которого просматрива-
ем все символы строки. Длину строки определяем при помощи свойства length. */
for (var i = 0; i<str.length; i++) {
/* Сравниваем текущий символ строки с буквами "А" и "я" (первый и последний символы в
русском блоке уникода) (буква "А" должна быть обязательно кирилличной - использование
латинского аналога собьет работу алгоритма). Если он принадлежит к нужному диапазону,
переходим к следующему символу. В противном случае обрываем работу кода и возвращаем
false (эти задачи выполняет предложение return). Определить, какой символ в строке
занимает позииию i, можно, воспользовавшись методом charAt(). */
if (str.charAt(i)>="А" && str.charAt(i)<="я") {
} else {
return false;
}
}
// Если цикл не прервался, значит, ни одного не кирилличного символа найдено не было. Возвращаем true.
return true;
// В случае, если поступившие данные не являются не пустой строкой,
// возвращаем false
} else {
return false;
}
}
trace(russ_text("Привет")); // Возвращает: true
trace(russ_text("Hello")); // Возвращает: false (использованы латинские
// буквы)
trace(russ_text('_root')); // Возвращает: false (_root не является строкой)
Этот пример взят из книги и ОЧЕНЬ подробно откомментирован. Надеюсь поможет.
Удачи!
crazyone
10.04.2008, 17:40
trace(russ_text('_root')); // Возвращает: false (_root не является строкой)
'_root' является строкой, но не кирилической. _root не является... Кавычки лишние.
Взят из книги? Из какой такой книги? Функция не учитывает пробелов, цифер и знаков препинания и называется russ_text. И вобще - плохая книга какая-то, если действительно книга. Хотя комментарии и ОЧЕНЬ подробные.
chingachgoog
10.04.2008, 18:19
false
Это потомучто в условии цикла ошибка - не надо было = ставить. (плюс см. что сказал crazyone про пробыл, кавычки и т.п.)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.