1

我在限制文本框值方面遇到困难。

文本框不应允许除"?*,".

前任:A123?*,B456?*,C789?*,D126?*,E?*666

(,)10 Characters/Symbols/Numbers允许逗号前后。

54 characters允许在文本框内,包括逗号。

4 comma's允许在 TEXTBOX 内。

可能的文本框输入: ABC?12345*,A?BC*12345,A???1234**,?*C?12345*,ABC?123***

符号和字符也是可替换的,在开始时 - 符号可能会出现或字符或数字。

请检查图像以获得更多说明。 在此处输入图像描述

我尝试使用其他符号和允许的逗号进行限制,但我在限制 10 个字符和允许符号和字符数方面遇到了困难。

//<![CDATA[ 
window.onload = function() {
    /*var f = document.getElementById('textbox_restrict');
     f.addEventListener('keyup', function(evt){
     alert("Vinayagam");
     var regex = /[^a-zA-Z0-9]/;
     if(regex.test(this.value)) {
     this.value = this.value.replace(regex, '')  
     }
     });*/
    $('#textbox_restrict').keypress(function(e) {
        $('#backgroundPopup').animate({'opacity': 0.0, 'display': 'none'});
        this.value = this.value.replace(/[^0-9a-zA-Z\*\?\{0,12}]/g, '').toUpperCase();
    });

}//]]>  

$(function() {
    $('body').on('keyup', 'input[id^="textbox_restrict"]', function() {
        this.value = this.value.replace(/[^0-9a-zA-Z\*\?]/g, '').toUpperCase();
    });

    $('#search').live('click', function() {
    }); // End of save click function
}); // End of function 

我也参考了这个问题,但 senario 是不同的: 如何限制 C# 中的文本框只接收数字和(点“。”或逗号“,”),在“。”之后 或 "," 只允许 2 个数字字符

正则表达式替换除数字和小写以外的任何内容

jQuery keyup() 非法字符

请给我建议!我对实现它有点困惑。

4

2 回答 2

1

这个RegExp怎么样,

/^(?:[a-z\d?*]{1,10}(?:,|$)){1,5}$/i

从字符串的开头开始,允许字符a-z、数字?*,在这些之间有110,然后是逗号或字符串的结尾。至少重复一次,最多重复一次5。然后字符串必须结束。该i标志使a-zinclude A-Z

'A123?*,B456?*,C789?*,D126?*,E?*666'.match(/^(?:[a-z\d?*]{1,10}(?:,|$)){1,5}$/i);
// ["A123?*,B456?*,C789?*,D126?*,E?*666"]

应该注意的是,这不会阻止*?, ?x*or*x?也不会阻止字符串末尾的逗号。

于 2013-06-18T18:28:56.740 回答
1

也许最好不要试图一次完成所有事情。我已将任务分解为多个部分以简化每个阶段。只需将下面的代码片段作为keyup事件处理程序添加oninput到您的input.

keyUp = function () {
    var n, parts, temp,
        text = this.value,
        caretPos = this.selectionEnd; // Stores the caret position
    parts = text.split(','); // Creates an array of comma separated values
    while (parts.length > 5) { // Limits the array length to 5 i.e only 4 commas allowed
        parts.pop();
    }
    for (n = 0; n < parts.length; n++) { // Iterates through each comma separated string
        parts[n] = parts[n].substring(0, 10); // Limits the string length to 10
        temp = parts[n].match(/[0-9a-zA-Z\*\?]/g); // Creates an array of acceptable characters in the string
        if (temp) {
            parts[n] = temp.join(''); // Adds the accepted value to the original
        } else { // If not value, add empty to the original
            parts[n] = '';
        }
    }
    this.value = parts.join(',').toUpperCase(); // Creates a new acceptable value to the input
    this.setSelectionRange(caretPos, caretPos); // Returns the caret to the original position
    return;
}

jsFiddle的现场演示。

编辑

将字符串抑制删除为 54,以避免在字符串中间添加字符时意外删除字符串末尾的字符。添加else了这将在未找到可接受值的情况下添加一个空字符串。使用此代码似乎oninput也是一个更好的事件。

编辑二

添加了一个插入符号位置,在编辑中间的字符串后返回到原始位置。用鼠标粘贴文本时并不完美,但似乎可以在键盘输入上工作。(小提琴链接已更新。)

于 2013-06-18T19:31:37.497 回答