簡體   English   中英

將文本輸入限制為字符列表

[英]restrict text input to a list of characters

我想在鍵盤上輸入html文本輸入字段中的字符,然后針對字符列表驗證輸入的字符,如果在該列表中找不到該字符,則返回false

(我不想使用正則表達式)

“列表”是指:

var acceptable = 'abcd12';

例如,這將防止輸入字符“ e”,依此類推

html看起來像這樣:

<input id='someId' type='text' onkeypress='return check(this,event);'>

和javascript:

function check(element,e) {
    var acceptable = 'abcd12';
    // now get what character was entered
    // if it's in the list, return true
    // if it's not in the list, return false
}

通常,您需要像這樣將onChange事件處理程序綁定到輸入字段:

jQuery('#someId').change(function() {
    var acceptable = ['1', '2', 'a', 'b', 'y'];

    var text = jQuery(this).val();
    var allowed = true;

    // Loop through each character in the string
    var length = text.length;
    for (var i = 0; i < length; i++) {
        // This if condition is fulfilled if the character
        // is not in the array of acceptable characters
        if (jQuery.inArray(text[i], acceptable) != -1)
            allowed = false;
    }

    if (allowed)
        // The input is valid
    else
        // The input contains an unallowed character
});

重要:
始終必須對通過表單提交的數據進行服務器端驗證。 任何人都可以弄亂腳本中的代碼和HTML代碼。 有許多方法可以將虛假數據發送到服務器,無論您采取什么措施來防止它。 因此,始終進行服務器端驗證非常重要 ,因為服務器環境完全由您控制。

邊注
僅當字段失去焦點時才觸發onChange事件處理程序。 如果您不希望這種行為,請使用以下方法:

jQuery('#someId').on('change keypress paste focus textInput input',function(){
    // The same code as above can be used here
}

有關更多信息,請參見此鏈接

如果使用輸入的字符創建變量chr,則

acceptable.indexOf(chr) !== -1

如果字符是可接受的(在字符串中),則為true。

盡管我不了解該約束,但我將提出不使用正則表達式的解決方案。

這是驗證您的字符串的合理建議。

輸入您的輸入字符串,將其中每個有效字符替換為'' (空字符串),然后僅驗證長度為0。如果剩余字符(長度> 0),則驗證不通過。

另請注意,還有其他方法可以執行此操作。 現代瀏覽器在文本輸入上支持pattern屬性,該屬性將針對正則表達式進行驗證(在這種情況下編寫起來很簡單)。

我做了一個基於jQuery的小型解決方案:

$(document).ready(function() {
  $('#input').keypress(function(e) {
    var allowed = '02468abc';
    var e = e||window.event;
    var k = e.keyCode||e.which;
    var r = allowed.indexOf(String.fromCharCode(k))!=-1;
    r = (k==8||(k>=35&&k<=40)||k==46)?true:r;

    if(!r) {
      e.returnValue = false;
      if(e.preventDefault)
        e.preventDefault();
    }
  });
});

添加要傳遞變量內的字符allowed ,在該代碼中,允許的字符是02468ab ,和c

只要確保您的HTML中包含以下內容即可:

<input id="input" type="text"/>

您應該可以很好地使用它。

如果沒有jQuery,請發表評論,然后添加一些jQuery少的代碼。

編輯 :更改了代碼,以允許使用箭頭鍵,退格鍵,起始,結束和刪除。

這是此操作的演示

的HTML

<input type="text">

的JavaScript

input = document.querySelector("input");
restrictChars(input, "abc");

function restrictChars(input, chars) {
    input.addEventListener("keypress", function (e) {
        e.preventDefault();
        var character = String.fromCharCode(e.keyCode);
        var isValid = chars.indexOf(character) != -1;
        if (isValid) {
            input.value += character;
        }
    });
}

基本上,我們防止keypress事件的默認行為(以防止鍵入),並使用它從event.keyCode獲取按下的鍵。 然后,我們測試該字符是否存在於chars參數中(我認為不使用不必要的正則表達式),如果存在,我們通過將字符添加到<input>的值中來模擬正常行為,如果並非如此,我們絕對不做任何事情,因此不會鍵入任何內容。

希望這可以幫助!

Rou的代碼很干凈,但是鍵碼將始終返回大寫字母。 如果您需要區分大小寫,則鍵碼將不起作用。

我還假設您總是要檢查輸入的最后一個字符。

function check(e,element) {
    var acceptable = 'abcd12';
    var char = element.value.charAt(element.value.length - 1);
    if(acceptable.indexOf(char)>=0){
        document.getElementById("result").innerHTML="true";
    }
    else
    {
        document.getElementById("result").innerHTML="false";
    }
}

var inputElement = document.getElementById('someId');
inputElement.addEventListener('keyup', function( e ) {
                check( e, inputElement )
});

如果要修改它,請參見以下JSFiddle中的代碼: http : //jsfiddle.net/hckytaez/4/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM