在<input type =“number”/>中允许2个小数位

时间:2015-12-03 03:55:55

标签: html html5 numbers

我有一个<input type="number">,我希望将用户的输入限制为纯数字或数字,小数位数最多为2位小数。

基本上,我要求输入价格。

我想避免做正则表达式。有办法吗?

<input type="number" required name="price" min="0" value="0" step="any">

10 个答案:

答案 0 :(得分:205)

而不是step=".01",允许任意数量的小数位,使用public class Program_Lure_list_Adapter extends BaseAdapter implements View.OnClickListener { private static ArrayList<Program_Lure_Sound> programLureList; private LayoutInflater l_inflater; private int mPosition; private int[] Image = {R.drawable.blacksound}; ViewHolder viewHolder; ViewHolder selectedHolder; private Activity activity; public Program_Lure_list_Adapter(Activity a, ArrayList<Program_Lure_Sound> result) { activity = a; programLureList = result; l_inflater = (LayoutInflater)activity. getSystemService(Context.LAYOUT_INFLATER_SERVICE); } /*public Program_Lure_list_Adapter(Context context, ArrayList<Program_Lure_Sound> result) { programLureList = result; l_inflater = LayoutInflater.from(context); }*/ @Override public int getCount() { return programLureList.size(); } /*@Override public Object getItem(int i) { return null; }*/ public Object getItem(int position) { return position; } /*@Override public long getItemId(int i) { return 0; }*/ public long getItemId(int position) { return position; } @Override public View getView(final int i, View view, ViewGroup viewGroup) { if (view == null) { view = l_inflater.inflate(R.layout.layout_programlure_listitem, viewGroup, false); viewHolder = new ViewHolder(); viewHolder.iv_Image_souund = (ImageView) view.findViewById(R.id.imageView29); viewHolder.tv_soundName = (TextView) view.findViewById(R.id.textView92); viewHolder.tv_selected = (TextView) view.findViewById(R.id.textView_selected); view.setTag(viewHolder); } else viewHolder = (ViewHolder) view.getTag(); viewHolder.iv_Image_souund.setImageResource(Image[programLureList.get(i).getSoundImage()]); viewHolder.tv_soundName.setText(programLureList.get(i).getSoundName()); viewHolder.tv_selected.setVisibility(View.GONE); view.setTag(viewHolder); view.setOnClickListener(this); return view; } @Override public void onClick(final View v) { v.post(new Runnable() { @Override public void run() { ViewHolder holder = ((ViewHolder) v.getTag()); holder.tv_selected.setVisibility(View.VISIBLE); if (selectedHolder != null) selectedHolder.tv_selected.setVisibility(View.INVISIBLE); selectedHolder = holder; } }); } public class ViewHolder{ TextView tv_soundName; ImageView iv_Image_souund; TextView tv_selected; } private class OnItemClickListener implements OnClickListener{ private int mPosition; OnItemClickListener(int position){ mPosition = position; } @Override public void onClick(View arg0) { Activity_program_lure sct = (Activity_program_lure)activity; sct.onItemClick(mPosition); } } ,最多允许两位小数。

规范中的更多详细信息:https://www.w3.org/TR/html/sec-forms.html#the-step-attribute

答案 1 :(得分:23)

如果有人正在寻找只允许带有可选2位小数的数字的正则表达式

^\d*(\.\d{0,2})?$

举个例子,我发现下面的解决方案相当可靠

HTML:

<input name="my_field" pattern="^\d*(\.\d{0,2})?$" />

JS / JQuery:

$(document).on('keydown', 'input[pattern]', function(e){
  var input = $(this);
  var oldVal = input.val();
  var regex = new RegExp(input.attr('pattern'), 'g');

  setTimeout(function(){
    var newVal = input.val();
    if(!regex.test(newVal)){
      input.val(oldVal); 
    }
  }, 0);
});

答案 2 :(得分:16)

对于货币,我建议:

<div><label>Amount $
    <input type="number" placeholder="0.00" required name="price" min="0" value="0" step="0.01" title="Currency" pattern="^\d+(?:\.\d{1,2})?$" onblur="
this.parentNode.parentNode.style.backgroundColor=/^\d+(?:\.\d{1,2})?$/.test(this.value)?'inherit':'red'
"></label></div>

请参阅http://jsfiddle.net/vx3axsk5/1/

HTML5属性“step”,“min”和“pattern”将在表单提交时验证,而不是onblur。如果您有step,则不需要pattern,如果您有pattern,则不需要step。因此,您可以使用我的代码恢复到step="any",因为该模式无论如何都会验证它。

如果您想验证onblur,我相信为用户提供视觉提示也很有用,例如将背景着色为红色。如果用户的浏览器不支持type="number",则会回退到type="text"。如果用户的浏览器不支持HTML5模式验证,我的JavaScript代码段不会阻止表单提交,但它提供了一个视觉提示。因此,对于HTML5支持较差的人,以及在禁用JavaScript或伪造HTTP请求的情况下试图入侵数据库的人,您需要再次在服务器上进行验证。前端验证的要点是提供更好的用户体验。因此,只要您的大多数用户都拥有良好的体验,就可以依赖HTML5功能,前提是代码仍然有效,您可以在后端进行验证。

答案 3 :(得分:12)

第1步:将您的HTML数字输入框挂钩到onchange事件

myHTMLNumberInput.onchange = setTwoNumberDecimal;

或HTML代码

<input type="number" onchange="setTwoNumberDecimal" min="0" max="10" step="0.25" value="0.00" />

第2步:编写setTwoDecimalPlace方法

function setTwoNumberDecimal(event) {
    this.value = parseFloat(this.value).toFixed(2);
}

您可以通过更改传递到toFixed()方法的值来更改小数位数。请参阅MDN docs

toFixed(2); // 2 decimal places
toFixed(4); // 4 decimal places
toFixed(0); // integer

答案 4 :(得分:6)

尝试此选项,仅允许输入类型中的2位小数

<input type="number" step="0.01" class="form-control"  />

答案 5 :(得分:3)

我发现使用jQuery是我最好的解决方案。

$( "#my_number_field" ).blur(function() {
    this.value = parseFloat(this.value).toFixed(2);
});

答案 6 :(得分:-1)

使用此代码

<input type="number" step="0.01" name="amount" placeholder="0.00">

默认情况下,HTML5输入元素的步长值为step =“1”。

答案 7 :(得分:-2)

只写

<input type="number" step="0.1" lang="nb">

lang ='nb“让您用逗号或句点写小数点

答案 8 :(得分:-2)

你可以使用这个。反应钩子

<input
                  type="number"
                  name="price"
                  placeholder="Enter price"
                  step="any"
                  required
                />

答案 9 :(得分:-8)

输入时:

step="any"
class="two-decimals"

在剧本上:

$(".two-decimals").change(function(){
  this.value = parseFloat(this.value).toFixed(2);
});