Javascript 输入类型=";“文本”;货币验证
我当前有一个输入type=“text”,在“keyup”事件中将其转换为货币值。为了保持此功能(正常工作),必须将输入类型设置为“文本”。同时,我希望将最小值设置为“100.00”。 我有什么办法可以做到这一点吗?另外,我是否能够自定义jquery验证消息,使其显示“最低金额$100.00”Javascript 输入类型=";“文本”;货币验证,javascript,jquery,html,Javascript,Jquery,Html,我当前有一个输入type=“text”,在“keyup”事件中将其转换为货币值。为了保持此功能(正常工作),必须将输入类型设置为“文本”。同时,我希望将最小值设置为“100.00”。 我有什么办法可以做到这一点吗?另外,我是否能够自定义jquery验证消息,使其显示“最低金额$100.00” $('input.number').keyup(函数(事件){ $(this).val(函数(索引,值){ 返回值 .替换(/\D/g,“”) 。替换(/([0-9])([0-9]{2})$/,“$1.$
$('input.number').keyup(函数(事件){
$(this).val(函数(索引,值){
返回值
.替换(/\D/g,“”)
。替换(/([0-9])([0-9]{2})$/,“$1.$2”)
.替换(/\B(?=(\d{3})+(?!\d)\.?)/g,“,”;
});
});代码>
您可以在输入字段中添加此属性:minlength=“5”
在JS代码中,您可以添加一个“if”语句来检查此输入是否包含至少5个字符
此外,您还可以在后端添加相同的“if”语句以再次检查。使用输入上的type=“number”
而不是type=“text”
创建的片段仍然允许jQuery功能工作
验证消息是HTML5,而不是jQuery,因为您没有提供该代码。我做了以下工作:
更改为type=“number”
添加了min=“100”
添加了step=“0.01”
以处理货币步进
$('input.number').keyup(函数(事件){
$(this).val(函数(索引,值){
返回值
.替换(/\D/g,“”)
。替换(/([0-9])([0-9]{2})$/,“$1.$2”)
.替换(/\B(?=(\d{3})+(?!\d)\.?)/g,“,”;
});
});代码>
文本输入(原件):
数字输入:
输入小于100,然后按“提交”查看验证。
谢谢大家的意见。
最后,我保留了用户可以输入的位数的输入type=“text”,并调用了一个函数来对照100检查输入值
function checkAmount() {
var valueBalance = $("#balance").val();
var valueNumberBalance = parseFloat((valueBalance).replace(/[^\d\.]/, ''));
if (valueNumberBalance < 100) {
$("#balance").get(0).setCustomValidity("Minimum Amount of $100.00");
}
else {
$("#balance").get(0).setCustomValidity("");
}
函数checkAmount(){
var valueBalance=$(“#balance”).val();
var valueNumberBalance=parseFloat((valueBalance).replace(/[^\d\.]/,'');
如果(valueNumberBalance<100){
$(“#余额”).get(0).setCustomValidity(“最低金额$100.00”);
}
否则{
$(“#余额”).get(0.setCustomValidity(“”);
}
}您可以尝试使用regex进行货币验证
<div class="col-sm-3 form-group">
<b>Premium :*</b><br>
<p><input type="text" class="form-control" oninput="this.className = ''" name="premium" id="premium" valideAtt="currency" title="Premium" onblur="defaultValidation(this)"></p>
<span id="er_premium" style="display: block; width:100%; float: left;"></span>
</div>
<script type="text/javascript">
var REG_CURRENCY = /(?=.*\d)^\$?(([1-9]\d{0,2}(,\d{3})*)|0)?(\.\d{1,2})?$/;
function defaultValidation(src){
var getAttributeValue=src.attributes.valideAtt.value;
if(getAttributeValue=="currency"){
if(!src.value.match(REG_CURRENCY)){
$("#"+src.id).addClass("invalid");
$("#er_"+src.id).html("<span style=\"color:red\">Please Enter Valide currency Value.<\span>");
return false;
}else{
$("#er_"+src.id).html("");
return true;
}
}
}
<script>
高级:*
var regu CURRENCY=/(?=.*\d)^\$([1-9]\d{0,2}(,\d{3})*)0)?(\.\d{1,2})?$/;
函数默认验证(src){
var getAttributeValue=src.attributes.valideAtt.value;
如果(getAttributeValue==“货币”){
如果(!src.value.match(注册货币)){
$(“#”+src.id).addClass(“无效”);
$(“#er#”+src.id).html(“请输入有效货币值”);
返回false;
}否则{
$(“#er#”+src.id).html(“”);
返回true;
}
}
}
您可以分享您的尝试吗?您要求我们添加最小值和错误消息,但不清楚您已经尝试了什么,也不清楚是什么给您带来了麻烦,因为您的代码不包含任何与最小值或错误消息相关的内容。@TylerRoper,我尝试使用此处所述的模式,但是它不能识别小数点。我正要评论一下在keyup
上修改用户的输入是多么糟糕的设计,因为它会干扰退格之类的东西,但是你处理得非常好。从用户界面的角度来看,我唯一的抱怨是,我输入了1.00
,但我的意思是2.00
,所以我开始尝试删除它,但因为你的格式化程序启动了,它会将光标位置发送到末尾,结果我得到了0.02
——这根本不是我想要的。这个案子没有简单的解决办法,尽管…@NiettheDarkAbsol,是的,那里没有一个完整的回旋余地。然而,在我看来,最终的结果证明了使用退格键或突出显示输入的小小不便是合理的。我已经尝试过这种方法,在更糟糕的情况下,我可以朝这个方向走。我只是想把Jquery验证和页面上的其他东西一样使用。谢谢你的观点。谢谢。好的,我想这个链接可以满足你的需要。谢谢你的回复。我很感激。它确实部分解决了我的问题。type=“number”仅允许5位数字,我的用户可以输入比允许的数字高得多的数字。有什么办法可以解决这部分问题吗?在输入中添加一个max=“99999”
,以限制数字。这是一个验证检查,而不是输入检查,因此用户需要提交表单。再次查看时,我对您想要的结果感到困惑:您想将其限制为5位吗?我想允许用户输入9999999999.00,而使用类型号似乎是一项艰巨的任务。所以,我留下了文本,并检查了一个函数的值。谢谢type=“number”并没有将其限制为5位数字,但您在函数中提供的正则表达式添加了一个逗号(,),它不是数字输入中的有效字符,因此在输入第六位数字后将其清除:1234.56