Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Посимвольное сравнение чисел (https://javascript.ru/forum/misc/51694-posimvolnoe-sravnenie-chisel.html)

deep4565 16.11.2014 09:42

Посимвольное сравнение чисел
 
Добрый день!

на delphi я писал код примерно такой (посимвольная проверка введенных чисел):

s:string;
if (s[1]=s[2]) and (s[2]=s[3]);
then showmessage ('ошибка ввода');
else showmessage ('нет ошибки');
проверка при нажатии на btn

Помогите переписать этот код на javascript.
Спасибо!

danik.js 16.11.2014 11:23

Цитата:

Сообщение от deep4565
s:string;

var s;

В JavaScript динамическая типизация. Поэтому при объявлении переменной не требуется указывать тип. Просто присваивай ей значение любого типа, какой тебе нужен. Например:
var s;
s = 'строка';


Цитата:

Сообщение от deep4565
s[1]

В JS точно такой же синтаксис обращения к символам строки (и элементам массива). Только нумерация начинается не с единицы, а с нуля, как и в большинстве языков программирования.

Цитата:

Сообщение от deep4565
s[1]=s[2]

В JS, как и в большинстве других языков, оператор сравнения выглядит как ==, потому как = - это оператор присваивания.

Цитата:

Сообщение от deep4565
and

К сожалению в JS нет ключевого слова and, вместо него используется && (как во всех C-подобных языках)
Цитата:

Сообщение от deep4565
showmessage

В браузер встроена функция alert для показа сообщений.

Цитата:

Сообщение от deep4565
if (..);
then [code1]
else [code2]


В C-подобных языках условия записываются как:
if (..)
  [code1]
else
  [code2]


Если код должен содержать несколько выражений (statement), то так:

if (..) {
  [code1]
} else {
  [code2]
}

bes 16.11.2014 12:04

в целом странно, что чел не решил эту задачу сам, введя соответствующий запрос в поисковик и прогуглив соответствующие операторы и конструкции (информация несекретная ;))

Цитата:

Сообщение от deep4565
на delphi я писал код примерно такой (посимвольная проверка введенных чисел):

s:string;
if (s[1]=s[2]) and (s[2]=s[3]);
then showmessage ('ошибка ввода');
else showmessage ('нет ошибки');

хотя возможно не странно, так как в целом не понятно, что делает этот код, приведи полный пример
предположим, есть строка '12345', то что ты проверяешь? что '1' == '2' и '2' == '3'?
а если проверка чисел, то зачем делать сравнение посимвольно, а не использовать, скажем, StrToInt?

хотя, в целом, ты сделал одну правильную вещь - предпринял уход с delphi :)

krutoy 16.11.2014 12:36

str1="12345"
str2="11145"
check=function(str){
    if(str[0]===str[1]&&str[1]===str[2])return alert("YES"); alert("NO")
}

check(str1)
check(str2)

deep4565 17.11.2014 09:25

<input id="test" type="text" />
<script>
var s;
if (s[0]==s[1] && s[1]==s[2] && s[2]==s[3] && s[4]==[5]&& s[6]==[7];
then alert ("message1")
else alert ("message2");

</script>

что не так?

2) в делфи можно было:

var
x: integer;
x:=5;

if (s[1]=inttostr(x))......

т.е. сравнение символа строки с числом. в js как это проделать?

danik.js 17.11.2014 12:31

Цитата:

Сообщение от deep4565
что не так?

Блядь все расписывал разжевывал, а ты даже не прочитал толком. Че за люди..
Цитата:

Сообщение от deep4565
var s;
if (s[0]==s[1] && s[1]==s[2] && s[2]==s[3] && s[4]==[5]&& s[6]==[7];

Ну и откуда в переменной, которой не назначено никакое значение возьмутся какие-то символы? Или делфи умеет читать мысли?
Цитата:

Сообщение от deep4565
т.е. сравнение символа строки с числом. в js как это проделать?

Бери да сравнивай. При сравнении операнды приведутся к одному типу автоматически.

alert(5 == '5');
alert(2 == '5');


Когда постишь код, жмякай кнопку

deep4565 18.11.2014 06:32

<input id="test" type="text" />
<script>
var s = 'test'

if (s[0]==s[1] && s[1]==s[2] && s[2]==s[3] && s[3]==s[4] && s[4]==s[5]){
alert ("message1");
}
else if (s[0]==s[2] && s[2]==s[3] && s[4]==s[5] && s[5]==s[6]&& s[6]==s[7]){
alert ("message2");
}
</script>


сообщение выходит без ввода данных в input id

kostyanet 18.11.2014 06:44

Цитата:

Сообщение от deep4565
т.е. сравнение символа строки с числом. в js как это проделать?

Да ему charCodeAt нужен походу.

danik.js 18.11.2014 09:46

Цитата:

Сообщение от deep4565
сообщение выходит без ввода данных в input id

Ну для начала, инпут станет объектом (узлом) в DOM-модели документа. Получить его (по id) можно так:
var input = document.getElementById('test');


Далее, ввод - это событие "input" (оно так называется). Самый простой способ (устаревший) навешать обработчик события:

input.oninput = function() {
    // этот код будет вызван всякий раз при вводе чего-либо в поле.
};


Современный вариант:

input.addEventListener('input', function() {
    // этот код будет вызван всякий раз при вводе чего-либо в поле.
});


Вместо события "input" можно использовать другое событие - "keyup" - опускание клавиши. Но клавиши - не единственный способ ввода в текстовое поле (не забываем про copy/paste и drag/drop).

Текущее значение инпута (строковое) доступно в свойстве input.value

deep4565 18.11.2014 12:04

<input id="test" type="text" />
<script>
var input = document.getElementById('test');
input.addEventListener('input', function() {
var s = 'test'
if (s[3]==s[4] && s[4]==s[5] && s[5]==s[6] && s[6]==s[7] && s[7]==s[8]){
alert ("message1");
}
else if (s[3]==s[4] && s[4]==s[5] && s[5]==s[6] && s[6]==s[7] && s[7]!=s[8]){
alert ("message2");
)};
}
</script>


Если все правильно понял, но так же не подтягивает.

danik.js 18.11.2014 12:07

Да заеб*ло уже. Ты опять через строку читаешь?
Цитата:

Сообщение от danik.js
Текущее значение инпута (строковое) доступно в свойстве input.value

Ты же тупо забил в s константу и еще чета хочешь. Магию какую-то ждешь? Которая догадается что тебе в s нужно вставить значение инпута.

Erolast 18.11.2014 12:13

А еще там синтаксическая ошибка в 12-13 строках.

bes 18.11.2014 21:59

Цитата:

Сообщение от deep4565
в делфи можно было:

var
x: integer;
x:=5;

нельзя так в delphi делать, завтра на работу не выходи

deep4565 26.11.2014 06:49

<script>
var s = prompt('Nomer', '');
if (s == null) {
  alert('Проверка отменена');
} else if ((s[0]==s[1])&& (s[1]==s[2])&& (s[2]==s[3])&&(s[3]==s[4])&&(s[4]==s[5])) {
    alert('message1');
  } else if ((s[0]!=s[1])&& (s[1]!=s[2])&& (s[2]==s[3])&&(s[3]==s[4])&&(s[4]==s[5])){
   alert('message2');
  } else {
    alert('message3');
  }

</script>

Почему не сравнивает?

deep4565 03.12.2014 06:07

Может не так сравниваются символы в JS?

danik.js 03.12.2014 06:46

function sameChars(chars) {
    return Array.prototype.every.call(chars, function(element, index, array) {
        return element === array[0];
    });
}
alert( [sameChars('aaa'), sameChars('aab')] );



var re = /^(.)\1*$/;

alert( [re.test('aaa'), re.test('aab')] );

deep4565 03.12.2014 13:31

((s[0]==s[1])&& (s[1]==s[2])&& (s[2]==s[3])&&(s[3]==s[4])&&(s[4]==s[5]))

а так невозможно сравнить?

danik.js 03.12.2014 13:38

К символу строки по индексу обращаться можно. Сравнивать символы между собой можно. Все можно.

danik.js 03.12.2014 13:39

Но твой код будет работать только для строк длиной в 6 символов.

deep4565 04.12.2014 09:31

Почему так не сравнивает?

<script>
var s = prompt('Nomer', '');
if (s == null) {
  alert('Проверка отменена');
} else if ((s[0]==s[1])&& (s[1]==s[2])&& (s[2]==s[3])&&(s[3]==s[4])&&(s[4]==s[5])) {
    alert('message1');
  } else if ((s[0]!=s[1])&& (s[1]!=s[2])&& (s[2]==s[3])&&(s[3]==s[4])&&(s[4]==s[5])){
   alert('message2');
  } else {
    alert('message3');
  }
</script>

krutoy 04.12.2014 09:44

deep4565,
а что именно не сравнивает? вторая ветка работает нормально, дальше не смотрел
var s = "aaaaaa"
if (s == null) {
  alert('Проверка отменена');
} else if ((s[0]==s[1])&& (s[1]==s[2])&& (s[2]==s[3])&&(s[3]==s[4])&&(s[4]==s[5])) {
    alert('message1');
  } else if ((s[0]!=s[1])&& (s[1]!=s[2])&& (s[2]==s[3])&&(s[3]==s[4])&&(s[4]==s[5])){
   alert('message2');
  } else {
    alert('message3');
  }

ЗЫ третья тоже работает
var s = "xyzzzz"
if (s == null) {
  alert('Проверка отменена');
} else if ((s[0]==s[1])&& (s[1]==s[2])&& (s[2]==s[3])&&(s[3]==s[4])&&(s[4]==s[5])) {
    alert('message1');
  } else if ((s[0]!=s[1])&& (s[1]!=s[2])&& (s[2]==s[3])&&(s[3]==s[4])&&(s[4]==s[5])){
   alert('message2');
  } else {
    alert('message3');
  }

рони 04.12.2014 09:53

Цитата:

Сообщение от deep4565
if (s == null)

if (s[0] == undefined )

Цитата:

Сообщение от deep4565
Почему так не сравнивает?

а что сравниваем?

krutoy 04.12.2014 09:55

Цитата:

Сообщение от рони
if (s[0] == undefined )

if(!s)

deep4565 05.12.2014 13:30

как задать значение s юзеру?
var s = "xyzzzz", а не так программно.

рони 05.12.2014 13:33

deep4565,
var s = prompt("", "")

deep4565 08.12.2014 06:33

Цитата:

Сообщение от рони (Сообщение 344772)
deep4565,
var s = prompt("", "")

задаю значения, но все равно не сравнивает

<script>
var s = prompt("","");
if (s == null) {
  alert('Проверка отменена');
} else if ((s[0]==s[1])&& (s[1]==s[2])&& (s[2]==s[3])&&(s[3]==s[4])&&(s[4]==s[5])) {
    alert('message1');
  } else if ((s[0]!=s[1])&& (s[1]!=s[2])&& (s[2]==s[3])&&(s[3]==s[4])&&(s[4]==s[5])){
   alert('message2');
  } else {
    alert('message3');
  }
</script>

bes 08.12.2014 19:34

сдаётся мне, что здесь deep trololo :)

deep4565 09.12.2014 06:33

Цитата:

Сообщение от bes (Сообщение 345566)
сдаётся мне, что здесь deep trololo :)

Хоть помог бы кто с кодом

deep4565 09.12.2014 13:05

Спасибо всем, разобрался.


Часовой пояс GMT +3, время: 16:38.