我正在尝试将文本框约束为数字或两个特殊字符串情况之一:“na”或“tx”。如果数字在输入中退出,则“na”和“tx”无效,不应在输入框中允许。如果存在“na”或“tx”,则不应允许数字。
我是reg表达式的新手,但有可能构建它吗?以下是我到目前为止的情况:
event.sender.element.find("input").keyup(function () {
this.value = this.value.replace(/((?!na)|([^0-9]))/g, '');
});
使用基本的在线示例,我知道如何将输入限制为纯数字。然而,我目前的一系列要求对我来说非常具有挑战性。
答案 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匹配。