У меня есть базовая HTML-форма, которая добавляет некоторые данные на страницу с помощью PHP. Я хочу сделать это поле формы полем "Цена". Мой HTML это:

<input class="bids" name="comment" id="comment" tabindex="4" />

Как я могу исправить это поле, чтобы пользователи не могли вводить случайные буквы, знаки доллара, тире или другие странные форматы. Я хочу, чтобы на выходе были целые доллары. Извините, я полный дебил в программировании. :)

1
RodeoRamsey 11 Июн 2010 в 12:21

3 ответа

Лучший ответ

Используйте JavaScript с регулярным выражением, чтобы разрешить только цифры на стороне клиента. Вы также должны выполнить проверку на стороне сервера, используя php & regex, чтобы убедиться, что данные публикации содержат только цифры.

Вот функция javascript, которая проверяет, содержит ли конкретное поле ввода только цифры.

function IsNumeric(numstr)
{
    if (numstr.match(/^\d+$/ ) ) {

        alert("Valid number");
    }
    else
    {
        alert("Only numeric values are allowed");
    }
}

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

Не забудьте также выполнить проверку PHP на стороне сервера ...

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

preg_match('/[0-9]+/', $numstr);
1
Sev 11 Июн 2010 в 08:45

Вы можете использовать приведенный ниже код, чтобы ограничить ввод в поле ввода числом и десятичной точкой. Он использует каретку плагина jquery для получения текущей позиции ввода и длины выделения. Вы можете исправить количество цифр, а также количество десятичных знаков

$("#mPrice").live(
"keydown keyup",function(event) {
checkNumberDecimal(event,'mPrice',2,7);});


function checkNumberDecimal(event,element,noDecimal,noDigit)
{

var number = $('#'+element).val();
var caretlength = $('#'+element).caret().text.length;
var position = $('#'+element).caret().start;
var flagDecimal=0;
var flagDigit=0;


if(number.indexOf('.') != -1)
{
var n = number.substring(number.indexOf('.')+1);
if(caretlength <=1 )
  {
   if(n.length >= noDecimal &&  (number.length - position) < (noDecimal+1))
   flagDecimal=1;

if(noDigit > -1)
{
 if(number.length >= (noDigit+1))
 flagDigit = 1;
} 
} else if(position == (number.length - (n.length+1)))
{ 
    if(noDigit > -1)
      {
       if(number.length >= (noDigit+1))
         flagDigit = 1;
      } 
}
 }
 else
{
 if(caretlength <=1)
  if(noDigit > -1) 
   {
    if(number.length  >= (noDigit - noDecimal))
           { flagDigit = 1;}
 } 
 }


 // Allow: backspace (8), delete (46), tab (9), escape (27), enter (13), decimal (110),         period (190), 0-9 (48-57), 0-9 (96-105)
 // keypad: 0-9 (48-57), a-z (65-90) period (190)
 // numpad: 0-9 (96-105), decimal (110)
 // capslock (20)
 // end (35), home (36) left arrow (37), up arrow (38), right arrow (39), down arrow (   (40)

    if ((number.indexOf('.') < 0 && noDecimal > 0 && (event.keyCode ==110 ||    event.keyCode == 190)) || event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9  || event.keyCode == 27 || event.keyCode == 13 || 
         // Allow: Ctrl+A
        (event.keyCode == 65 && event.ctrlKey === true) ||
         // Allow: home, end, left, right
        (event.keyCode >= 35 && event.keyCode <= 39)) {
             // let it happen, don't do anything
             return;
    }
     else{
        // Ensure that it is a number and stop the keypress
        if (flagDecimal === 1 || flagDigit === 1 || event.shiftKey || (event.keyCode <  48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
            event.preventDefault(); 
        }   
    } 
 } 
0
Sumeet Gadodia 5 Июл 2012 в 10:18

Придайте форму событию onsubmit

<form blah ... onsubmit="return proof(this)">

Ваша функция доказательства делает что-то вроде:

var proof = function(form){
    value = form.comment;
    var strReg = "^([0-9\.\-])";
    var regex = new RegExp(strReg);

    return(regex.test(value));
}
0
helle 11 Июн 2010 в 08:39