簡體   English   中英

只需要輸入或刪除某些字符

[英]Need to only allow certain characters to be entered OR deleted

我有一個文本框。 我希望用戶能夠輸入的唯一內容是括號。 它們還應該只能刪除括號。 我在這樣做上有很多麻煩。

現在我有一個這樣的功能:

        '#myTextArea input': function (el, ev) {

        }

我使用了輸入,以便可以處理人員粘貼。

我不確定如何從中找到鍵入的字符。 我尤其不知道如何確保僅刪除括號。 有人知道這樣做的好方法嗎?

編輯為了澄清起見,文本框中已經填充了文本。 用戶應該只能夠向已經存在的文本添加和刪除括號。

EDIT2

我成功了,所以用戶只能輸入括號。 這不考慮粘貼,也不處理刪除。 還是不知道該怎么做.....

        '#myTextArea keydown': function (el, ev) {
            if ((ev.keyCode != 48 && ev.keyCode != 57) || ev.shiftKey == false){
                return false;
            }
        }

一種可能的解決方案是在按鍵事件中以編程方式執行此操作。 我僅顯示插入時的情況(通過按鍵或粘貼)。

通常,無論是按下字符鍵還是Ctrl-V,都會在字符串中插入一個子字符串。 插入符號的位置將在該子字符串的末尾。

我的算法發現該子字符串是兩個位置之間的字符串:

  • 最長公共前綴的結尾(不同的第一個字符是插入的子字符串的開頭)
  • 插入位置

然后,它使用函數filterString過濾字符串,該函數將用“”替換所有非括號符號

最后將輸入值更新為最長公共前綴+過濾后的字符串+插入號后的文本

您需要使用此jquery插件來進行插入符號操作: http : //jcaret.googlecode.com/

<input id="myTextArea" value="a*(b*(c+d))">
</input>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="http://jcaret.googlecode.com/files/jquery.caret.1.02.min.js"></script>

<script type="text/javascript">
var old_value = $('#myTextArea').val();

function filterString(a) {
    return a.replace(/[^\(\)]/g,"");
}

$('#myTextArea').keyup(function(){
    var end_of_insertion = $(this).caret().start;
    var new_value = $(this).val();

    var i=0;

    while(i<old_value.length && i<new_value.length && old_value[i]==new_value[i]) {
        i++;
    }
    if(i>=end_of_insertion)return;

    // i now points to first different character in strings old_value and new_value

    new_value = new_value.substr(0,i)
        + filterString(new_value.substr(i,end_of_insertion-i))
        + new_value.substr(end_of_insertion);

    $('#myTextArea').val(new_value).caret({start: end_of_insertion, end: end_of_insertion});
    old_value = new_value;
});
</script>

暫無
暫無

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

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