我有一个文本输入和输入按钮。我想阻止数字输入。
<input type="text" name="lastNameSend" id="lastNameSend" placeholder="Surname" class="sendFormInput"></input>
<input id="sendPhysButton" class="button button_at_left" type="submit">
我使用jquery regexp:
$(document).on("click","#sendPhysButton", function(event)
{
if ($("#lastNameSend").val().search("/[0-9]*/i"))
{
alert($("#lastNameSend").val().search("/[0-9]*/i"));
}
event.preventDefault();
});
由于某种原因,它总是警告-1。当我输入数字时它是-1,当我输入字母时它是-1。 这是一个小提琴:http://jsfiddle.net/jupnzty0/3/ 怎么了?
答案 0 :(得分:2)
String.search
接收RegExp。如果传入非RegExp对象obj
(在您的情况下,它是一个String),则使用new RegExp(obj)
将其隐式转换为RegExp对象。
如果成功,search
将返回字符串中正则表达式的第一个匹配项的索引。否则,它返回-1。
转载自MDN参考。
请注意/<regexp>/<flags>
是RegExp文字的语法。将字符串传递给RegExp构造函数时,只需要传入<regexp>
,再加上第二个参数中的标志。例如,new RegExp("[a-z]", "i")
和/[a-z]/i
在功能方面是等价的(如果有任何差异,那么前者是对象,后者是文字)。
请注意,String literal和RegExp文字对于转义特殊字符有不同的规则。例如,new RegExp("\\\\/")
和/\\\//
在功能上是等效的,两者都测试子串\/
。
回到你的代码,有一些问题:
"/[0-9]*/i"
作为字符串传递,隐式转换使其尝试匹配/
,然后匹配0或更多数字,然后/
,然后i
。/[0-9]*/i
可以匹配*
零或更多量词的空字符串,这意味着它可以在任何字符串中找到匹配项。i
标志是多余的 - 它不会影响[0-9]
。[0-9]
可缩短为\d
,但不是必须的。>= 0
返回的索引。如果要检查正则表达式不是否与正则表达式匹配。比较< 0
返回的索引。正确的解决方案是:
if ($("#lastNameSend").val().search(/[0-9]/) >= 0) {
// Found invalid character
}
如果你想传递一个字符串,"[0-9]"
也可以。
有一种更方便的方法 - RegExp.test
,如果在字符串中找到模式,则返回true
,否则返回false
:
if (/[0-9]/.test($("#lastNameSend").val())) {
// Found invalid character
}
答案 1 :(得分:1)
这里有很多事情会阻碍,但两个大的引用正则表达式并使用'*'。试试这个:alert($("#lastNameSend").val().search(/\d/));
我还更新了您的fiddle