Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверить Input (https://javascript.ru/forum/misc/73860-proverit-input.html)

Зосимов 23.05.2018 09:21

Проверить Input
 
всем привет.
есть код который проверяет input
if($(this).val() != "")

мне нужно сделать что бы еще это поле обязательно содержало первую букву. Буквы S, M или X

подскажите пожалуйста - как реализовать такую проверку?

Nexus 23.05.2018 09:26

Цитата:

Сообщение от Зосимов
подскажите пожалуйста - как реализовать такую проверку?

Извлечь первый символ из строки (https://javascript.ru/string/substr) и проверить его на принадлежность массиву символов (https://javascript.ru/string/indexof).
Можно регуляркой.

destus 23.05.2018 09:29

Nexus,
startsWith

laimas 23.05.2018 09:36

if(!/^S|M|X.+/.test(this.value)) ...

ksa 23.05.2018 10:03

Или так...

if(!/^[SMX].+/.test(this.value)) ...

Nexus 23.05.2018 10:11

destus, или так.

рони 23.05.2018 10:20

laimas,
без () или [] не обойтись
alert(/^S|M|X.+/.test("testM"));

laimas 23.05.2018 10:47

Да, последний же захватит

Alexandroppolus 23.05.2018 11:24

.+ не надо

Зосимов 23.05.2018 14:17

Цитата:

Сообщение от рони (Сообщение 485852)
laimas,
без () или [] не обойтись
alert(/^S|M|X.+/.test("testM"));

Спасибо.
упс. разобрался ))

laimas 23.05.2018 14:34

Цитата:

Сообщение от Зосимов
проверяю так

Нет, вы же замечание рони копируете, но игнорируете. Нужно так:

$('.bel').each(function() {
    if(/^[CMX]./.test(this.value)) {
        //значение не пустое и соответствует условию
   } else {
        //пустое значение или не соответствует условию
   }
})

Зосимов 23.05.2018 14:37

вот не знаю только, на сколько это получилось правильно.
проверяю несколько значений на наличие буквы -
$.each($('.bel'),function(){
  if($(this).val() != ""){
    str = $(this).val();
             
              if(!/^C|M|X.+/.test(str)){
                console.log("false");
              }
              else { ..выполняю код }          
              
      }
    });

Зосимов 23.05.2018 14:42

Цитата:

Сообщение от laimas (Сообщение 485868)
Нет, вы же замечание рони копируете, но игнорируете. Нужно так:

$('.bel').each(function() {
    if(/^[CMX]./.test(this.value)) {
        //значение не пустое и соответствует условию
   } else {
        //пустое значение или не соответствует условию
   }
})

у меня задача - если есть хоть одно не соответствие, прервать код и выдать сообщение

laimas 23.05.2018 14:45

Да елки палки, зачем $(this).val() да еще дважды, если доступен DOM объект (this) и его стандартное свойство value?

Вам чего надо: а) проверить не пусто ли и удовлетворяет условию, что походу и наблюдается; б) проверять условие только если есть значение?

рони 23.05.2018 14:46

Зосимов,
var inputs = document.querySelectorAll('.bel');
var validity = [].every.call(inputs, function(node) {
   var str = node.value.trim();
   return !str || /^(C|M|X)/.test(str)
});

if(!validity) alert("err");

Зосимов 23.05.2018 15:06

Цитата:

Сообщение от laimas (Сообщение 485872)
Да елки палки, зачем $(this).val() да еще дважды, если доступен DOM объект (this) и его стандартное свойство value?

Вам чего надо: а) проверить не пусто ли и удовлетворяет условию, что походу и наблюдается; б) проверять условие только если есть значение?

да нужно так
value мне нужен что бы вывести его на консоль )

Зосимов 23.05.2018 15:08

рони, ваш вариант мне подходит. но что выводить на консоль? мне нужно вывести значения, если у всех input есть буквы первые

laimas 23.05.2018 15:14

Цитата:

Сообщение от Зосимов
да нужно так

:D

Как именно? То что рони написал не годится?

У вас условие означает: если не пусто, то, если соответствует условию ..., иначе .... При этом не видно реакции на пустое значение.

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

Так чего надо то?

рони 23.05.2018 15:16

Цитата:

Сообщение от Зосимов
если у всех input есть буквы первые

return !str || /^(C|M|X)/.test(str)
красное уберите

рони 23.05.2018 15:18

Зосимов,
var inputs=document.querySelectorAll('.bel');
var validity = [].every.call(inputs, function(node) {
   var str = node.value.trim()
   return  /^(C|M|X)/.test(str)
});

if(validity) alert("ok");

Зосимов 23.05.2018 15:31

Цитата:

Сообщение от laimas (Сообщение 485877)
:D

Как именно? То что рони написал не годится?

У вас условие означает: если не пусто, то, если соответствует условию ..., иначе .... При этом не видно реакции на пустое значение.

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

Так чего надо то?

мне нужно - если значения ВСЕХ инпут не пусто, и значения ВСЕХ соответствуют условию, то - console.log(значения полей)
если хоть один input не соответствует условиям то - alert("error")

рони 23.05.2018 15:40

Цитата:

Сообщение от Зосимов
мне нужно - если значения ВСЕХ инпут не пусто, и значения ВСЕХ соответствуют условию, то - console.log(значения полей)

var inputs=document.querySelectorAll('.bel');
var res = [];
var validity = [].every.call(inputs, function(node) {
   var str = node.value.trim();
   res.push(str);
   return  str && /^(C|M|X)/.test(str)
});

if(validity)  console.log(res);
else console.log("err");

Зосимов 23.05.2018 15:43

Цитата:

Сообщение от рони (Сообщение 485881)
var inputs=document.querySelectorAll('.bel');
var res = [];
var validity = [].every.call(inputs, function(node) {
   var str = node.value.trim();
   res.push(str);
   return  str && /^(C|M|X)/.test(str)
});

if(validity)  console.log(res);
else console.log("err");

всегда err

может из за пустых полей?

рони 23.05.2018 15:47

Цитата:

Сообщение от Зосимов
может из за пустых полей?

Цитата:

Сообщение от рони
если значения ВСЕХ инпут не пусто,

:-?

Зосимов 23.05.2018 15:52

Цитата:

Сообщение от рони (Сообщение 485883)
:-?

это первая проверка на пустое значение :)

Зосимов 23.05.2018 15:58

рони,
если значения ВСЕХ инпут не пусто, и значения ВСЕХ соответствуют условию

рони 23.05.2018 16:00

Цитата:

Сообщение от Зосимов
это первая проверка на пустое значение

и что?
пример ниже ввести во все поля M
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
    var inputs = document.querySelectorAll(".bel"), out = $("#out") ;
    $(inputs).on("input", function() {
        var res = [];
        var validity = [].every.call(inputs, function(node) {
            var str = node.value.trim();
            res.push(str);
            return str && /^(C|M|X)/.test(str)
        });
        out.text(validity ? res : "err")
    })
});
  </script>
</head>

<body>
<input name="" class="bel" value="">
<input name="" class="bel" value="">
<input name="" class="bel" value="">

<div id="out"></div>
</body>
</html>


далее сами.

laimas 23.05.2018 16:06

рони,
первая буква одна из, а значит должно быть кроме нее что-то, иначе неверно.

Или не так, Зосимов?


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