将文本框限制为数字或仅使用正则表达式将两个非重复字符串中的一个限制

时间:2013-10-23 18:52:49

标签: javascript jquery regex

我正在尝试将文本框约束为数字或两个特殊字符串情况之一:“na”或“tx”。如果数字在输入中退出,则“na”和“tx”无效,不应在输入框中允许。如果存在“na”或“tx”,则不应允许数字。

我是reg表达式的新手,但有可能构建它吗?以下是我到目前为止的情况:

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

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

2 个答案:

答案 0 :(得分:2)

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

尽管如此,通常使用onkeypress& tandom中的onchange事件产生更好的结果:第一个阻止无效字符的“闪烁”,第二个阻止通过用鼠标粘贴数据来改变它。 See also: How to prevent number input on keydown一如既往:在服务器上重新验证它。

答案 1 :(得分:-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/

我在功能上看到的最大区别是在wrikkens上使用“t5”之类的字符串,它会变为“t”,而在我的触发数字模式时会变为“5”。

这允许它适合问题的参数。由于此时不存在'tx'或'na',因此数字应该接管,因为't'和'n'还没有匹配任何东西,但数字确实存在;因为它只需要一个字符作为数字匹配,而其他字符需要2匹配。