0

我试图将文本框限制为数字或两种特殊字符串情况之一:“na”或“tx”。如果输入中存在数字,则“na”和“tx”无效,不应在输入框中允许出现。如果存在“na”或“tx”,则不应允许使用数字。

我对 reg 表达式很陌生,但是可以构造它吗?这是我到目前为止所拥有的:

event.sender.element.find("input").keyup(function () {
    this.value = this.value.replace(/((?!na)|([^0-9]))/g, '');
});

使用基本的在线示例,我知道如何将输入限制为纯数字。然而,我目前的一组要求使这对我来说非常具有挑战性。

4

2 回答 2

2
string = string.replace(/^(n(a?|$)|t(x?|$)|[0-9]*).*$/g,'$1');

但是,通常,串联使用onkeypress&onchange事件会产生更好的结果:第一个可以防止无效字符的“闪烁”,第二个可以防止通过例如用鼠标粘贴数据来更改它。另请参阅:如何防止 keydown 上的数字输入一如既往:在服务器上重新验证它。

于 2013-10-24T00:06:03.847 回答
-1
$('input').keyup(function () {
    var a = $(this).val();
    if (a.match(/^tx/)) {
        a = 'tx';//set manually
    } else if (a.match(/^na/)) {
        a = 'na';//set manually
    } else if(a.match(/[\d]/)) {
        a = a.replace(/[^0-9]+/g, '');//replace all but numbers
    } else if (a.match(/^[nt]/)) {
       a = a.replace(/^([tn])([a-zA-Z])+$/,'$1');//replace with first letter
    } else {
        a = '';//matches nothing equals nothing
    }
    $(this).val(a);//print new value
})

它使用正则表达式删除任何不需要的输入,并提供有关演示的报告。如果它不以'tx'或'na'开头,但确实有一个数字,它会切换到数字模式,如果它确实以它们中的任何一个开头,那么很难设置它们。如果没有匹配,则清空。

编辑

尽管我的回答产生了正确的结果,但它并不像使用正则表达式那样简单。

所以我也添加了 Wrikkens 正则表达式,因为它更容易:http: //jsfiddle.net/filever10/FQ5aD/

我在功能上看到的最大区别是像“t5”这样的字符串,在 wrikkens 上,它被更改为“t”,而我的字符串则触发数字模式并将更改为“5”。

这允许它拟合问题的参数。由于此时 '​​tx' 或 'na' 都不存在,所以应该用数字代替,因为 't' 和 'n' 还不匹配任何东西,但数字可以;因为它只需要一个字符作为数字匹配,而其他字符需要 2 来匹配。

于 2013-10-23T20:15:56.827 回答