简体   繁体   English

如何设置“价格”的自定义表单输入字段?

[英]How to set custom form input field for “Price”?

I have a basic html form that adds some data to the page using PHP. 我有一个基本的html表单,可以使用PHP将一些数据添加到页面中。 I want to make this form field a "Price" field. 我想将此表单字段设为“价格”字段。 My html is: 我的html是:

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

How can I fix this field so that users can't enter random letters, dollar signs, dashes, or other weird formats. 如何解决此问题,使用户无法输入随机字母,美元符号,破折号或其他怪异格式。 I want the output to be whole dollars. 我希望输出是整美元。 Sorry I'm a complete programming moron. 抱歉,我是一个完整的编程傻瓜。 :) :)

Use javascript with regex to only allow digits for the client side. 将javascript与regex配合使用,仅允许客户端使用数字。 You should also do a server side check using php & regex to make sure the post data only contains digits. 您还应该使用php和regex进行服务器端检查,以确保帖子数据仅包含数字。

Here is a javascript function that checks to make sure that a particular field input contains only numbers. 这是一个JavaScript函数,用于检查以确保特定字段输入仅包含数字。

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

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

Take a look at this javascript regex guide to help you. 查看此javascript正则表达式指南以帮助您。

Don't forget to do the PHP checking on the server side as well... 不要忘记在服务器端也进行PHP检查...

The PHP regex function would look something like: PHP regex函数如下所示:

preg_match('/[0-9]+/', $numstr);

You can use below code to restrict input box input to number and a decimal point. 您可以使用以下代码将输入框输入限制为数字和小数点。 It uses jquery plugin caret to get current position of the input as well as length of selection. 它使用jquery插件插入符号来获取输入的当前位置以及选择的长度。 You can fix number of digits as well as number of decimal points 您可以固定数字位数和小数点位数

$("#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(); 
        }   
    } 
 } 

give the form the onsubmit event 给表单onsubmit事件

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

your proof function does something like: 您的证明函数执行以下操作:

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

    return(regex.test(value));
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM