使用jQuery将文本框输入限制为给定的正则表达式
请考虑以下文本框:
使用jQuery我想通过以下正则表达式将有效输入的集合限制为quantity_field
:
var quantityRegexp = "^(0|[1-9]+[0-9]*)$";
更具体地说,我想让浏览器丢弃输入到quantity_field
中的任何字符,这些字符会使文本字段的值不符合给定的正则表达式。 (当然也可以在服务器端进行相应的检查。)
例子:
- 如果用户键入“foo 234”,则只在文本框中输入“234”。
- 如果用户键入“001230”,则仅在文本框中输入“1230”。
- 如果用户键入“foo1bar”,则只在文本框中输入“1”。
问题: 使用jQuery实现这一目标的最简单方法是什么?
不是你的问题的答案(因为我不知道jQuery),但正则表达式^[1-9]*[0-9]*$
可能没有你想象或想的那样。 它匹配空字符串,但也匹配000000
类的数字。 我希望你不要那样,因为你的第一个字符类[1-9]
显然忽略了零。 我认为你应该将第一个*
改为+
: ^[1-9]+[0-9]*$
。 但是,该正则表达式将拒绝(单个)数字0
。 如果你想包含它,你应该做: ^(0|[1-9]+[0-9]*)$
。
jQuery Constrain插件允许“对文本框施加灵活约束”并接受正则表达式。 看这个演示 。
如果您不知道用户要键入多少个字符(并且只想将它们限制为数字),那么jQuery Validation插件是您最好的选择。
$('form.to-validate').validate({ rules: { quantity: { digits: true } } });
这只会允许用户输入数字。 如果你知道这个人要键入多少个字符,那么我还建议使用jQuery的Masked Input插件 ,这将为用户提供一个很好的视觉指示,告诉他们需要输入什么,并防止他们输入你做的字符不想在外地。
如果你不仅仅是数字并且必须检查正则表达式,那么这篇文章有一个方法可以为jQuery Validation Plugin添加一个自定义validation方法,它可以得到你想要的东西。
希望有所帮助!
我建议你让用户提供他想要的东西,然后对提交表格进行validation。 (当然,您仍然必须检查服务器端,因为他可以轻松地禁用或更改javascriptvalidation代码)
有关validation,请查看
jQueryvalidation插件
定义一个全局变量“oldVal”(下面没有描述),它包含最后一个已知的好值。 绑定到输入字段的keydown操作:
这应该让你开始