[英]allowing input only for float number
在使用 jquery 庫進行僅允許浮點數的輸入時,我很痛苦。 我的代碼無法阻止字符“。” 當它成為第一個輸入時,有人可以指導我解決這個問題嗎?
$('.filterme').keypress(function(eve) {
if ( ( eve.which != 46 || $(this).val().indexOf('.') != -1 )
&& ( eve.which < 48 || eve.which > 57 )
|| ( $(this).val().indexOf('.') == 0)
)
{
eve.preventDefault();
}
});
我使用這個 - 適用於鍵盤輸入或復制和粘貼
$('input.float').on('input', function() { this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\\..*?)\\..*/g, '$1'); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <input type="text" class="float" />
解釋:
我使用 jQuery Caret 插件過濾第一個位置輸入。 否則,一旦輸入點,檢查它的位置已經晚了。 我嘗試檢查點,然后刪除點,但它看起來不太好。
jQuery 插入符插件: http : //examplet.buss.hk/js/jquery.caret.min.js
我做了什么:
http://jsfiddle.net/FCWrE/422/
嘗試一下 :)
$('.filterme').keypress(function(eve) { if ((eve.which != 46 || $(this).val().indexOf('.') != -1) && (eve.which < 48 || eve.which > 57) || (eve.which == 46 && $(this).caret().start == 0)) { eve.preventDefault(); } // this part is when left part of number is deleted and leaves a . in the leftmost position. For example, 33.25, then 33 is deleted $('.filterme').keyup(function(eve) { if ($(this).val().indexOf('.') == 0) { $(this).val($(this).val().substring(1)); } }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/caret/1.0.0/jquery.caret.min.js"></script> <input type="text" class="filterme">
正則表達式也是我的推薦。 如果該值作為數字而不是字符串傳遞,您可以使用 .toString 將其更改為字符串並使用正則表達式對其進行驗證。 例如:
var str = value.toString();
if(!str.match(/^-?[0-9]*[.][0-9]+$/)) {
alert("Value must be a float number");
return;
}
return value;
如果傳遞的值是浮點數,則上述正則表達式將匹配。 它接受負數和正數。 如果您只想接受正數,只需刪除“-?” 從表達式。 如果該值只是零“0”而沒有任何小數點,它也會失敗。 如果您想接受零,只需將其作為條件添加到“if”語句中。
您可以使用上述驗證和 onchange 事件來防止用戶輸入非飛行號碼。
您可以使用以下方法,在onkeypress事件上調用。 下面是 HTML 代碼片段,然后是 JS 方法:
input type="text" onkeypress ="return isNumberKey(event)" id="floor"
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode == 46){
var inputValue = $("#floor").val();
var count = (inputValue.match(/'.'/g) || []).length;
if(count<1){
if (inputValue.indexOf('.') < 1){
return true;
}
return false;
}else{
return false;
}
}
if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)){
return false;
}
return true;
}
注意:上面的代碼還確保您在輸入中只輸入一個小數。
這是我的解決方案,也適用於負數(小提琴)
$("input").keypress(function (event) {
var inputCode = event.which;
var currentValue = $(this).val();
if (inputCode > 0 && (inputCode < 48 || inputCode > 57)) {
if (inputCode == 46) {
if (getCursorPosition(this) == 0 && currentValue.charAt(0) == '-') return false;
if (currentValue.match(/[.]/)) return false;
}
else if (inputCode == 45) {
if (currentValue.charAt(0) == '-') return false;
if (getCursorPosition(this) != 0) return false;
}
else if (inputCode == 8) return true;
else return false;
}
else if (inputCode > 0 && (inputCode >= 48 && inputCode <= 57)) {
if (currentValue.charAt(0) == '-' && getCursorPosition(this) == 0) return false;
}
});
function getCursorPosition(element) {
if (element.selectionStart) return element.selectionStart;
else if (document.selection)
{
element.focus();
var r = document.selection.createRange();
if (r == null) return 0;
var re = element.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
return 0;
}
這對我有用:
var str = document.getElementById('product_'+id_product).value;
if( !str.match(/^[0-9]*([.,][0-9]+)?$/) ) {
console.log("Value must be a number or float number");
}else{
console.log("The number is valid");
}
我希望這可以幫助某人。 問候!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.