проверить, является ли ввод формы целым числом из 1 или 2 цифр с jquery и php - PullRequest
2 голосов
/ 01 апреля 2011

У меня есть форма с пятью полями, все из которых установлены на maxlength = "2".

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

Есть ли jquery, который не позволит пользователю даже ввести значение, которое не является целым числом?

Также что будетлучший способ проверить это с jquery и php?Я нашел несколько способов сделать это, но мне нужно убедиться, что это безопасно, избегая символов, -2, .1 и т. Д.


решено

Для php-части, которую я использовал

if(!ctype_digit($_POST['value']))

, который учитывает только положительные целые числа

И для javascript

 $('.inputQuantity').keyup(function(){ 
    this.value = this.value.replace(/[^0-9\.]/g,'');
});

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

Оба выше работают, хотя я думаю, что некоторые люди предпочитают использовать focusout (function (), а не keyup (function ();)

Ответы [ 5 ]

2 голосов
/ 01 апреля 2011

Тестирование, если строка содержит только одну цифру или две цифры, в PHP может быть выполнено с регулярным выражением:

// $string is supposed to contain your data -- maybe obtained from $_POST['field_name']
if (preg_match('/^\d{1,2}$/', $string)) {
    // it's one or two digits
}

По сути, это тестирование для:

  • началостроки: ^
  • Цифра: \d
    • Один или два раза: \d{1,2}
  • Конец строки: $


И, в Javascript, я полагаю, вы могли бы использовать то же регулярное выражение:

// str is supposed to contain your data
if (/^\d{1,2}$/.test(str)) {
    // it's one or two digits
}
0 голосов
/ 25 мая 2011

решено

Для php-части я использовал

if(!ctype_digit($_POST['value']))

, которая допускает только положительные целые числа

И для javascript

 $('.inputQuantity').keyup(function(){ 
    this.value = this.value.replace(/[^0-9\.]/g,'');
});

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

Оба выше работают, хотя я думаю, что некоторые люди предпочитают использовать focusout (function (), а не keyup (function ();)

0 голосов
/ 01 апреля 2011

Я создал функцию на основе PHP специально для вас -

<form action="" method="POST">
       <input type="textbox" name="number" />
       <input type="submit" value="Check" />
</form>
<?php

  $i = $_POST['number'];

  function check_number_digits($i)
  {
      $func = preg_replace('/[^0-9]/', '', $i);
      if($_POST)
      {
          if(!$func)
          {
              echo 'You entered no Number!';
          }
          else
          {
              return strlen($func);
          }
      }
      else
      {
          //Can do anything!
      }
  }

  echo  check_number_digits($i);

?>

Я протестировал, и она отлично работает!Скажите, полезно это или нет.

Надеюсь, это сработало!

0 голосов
/ 01 апреля 2011

Один теоретический новомодный способ обеспечить это:

<input type="number" name="number1" maxsize="2" >

Но вам все еще нужен Javascript для старых браузеров:

<input name="num2" onchange="this.value = this.value.replace(/\D/, '')">

Нет способа избежать проверки на стороне сервера.

0 голосов
/ 01 апреля 2011
$("input[maxlength=2]").change(function(){
   var val = $(this).val();
   $(this).val(parseInt(val));
});

Не проверял.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...