Javascript RegEx部分匹配

时间:2012-01-30 08:09:28

标签: javascript regex

我有一个正则表达式模式,用于验证三位数

/^\d{3}$/.test("123")   // true
/^\d{3}$/.test("123.")  // false

我想将此正则表达式用作文本框的输入限制。

基本上,如果新值匹配,我允许输入字符,否则我会阻止它。

问题是没有任何值匹配,因为“1”不是完全匹配,并且不允许我输入它。

是否有任何方法可以在javascript中测试regEx的部分匹配?

/^\d{3}$/.test("123")   // true
/^\d{3}$/.test("12")    // "partial match"
/^\d{3}$/.test("a12")   // false

修改

\ d {3}只是一个例子。 我需要使用电子邮件正则表达式或手机正则表达式作为输入限制。

"email"        // true
"email@"       // true
"email@@"      // false
"@yahoo.com"   // false

编辑2

我有一个textBox插件,其输入限制基于正则表达式。

正则表达式可以是任何东西,十六进制颜色正则表达式,例如:(#){1}([a-fA-F0-9]){6}

我需要阻止用户插入与正则表达式不匹配的字符。

例如,如果文本框为空,则第一个允许的字符为“#”。

但如果我对正则表达式测试“#”字符,它将返回“false”,因为“#”本身无效。

/^(#){1}([a-fA-F0-9]){6}$/.test("#") // false

但与此同时,“#”部分有效,因为它尊重正则表达式格式(我应该允许用户输入)

我需要知道的是,如果我可以验证字符串是否是正则表达式的部分匹配,那么我可以允许用户键入字符。

/^(#){1}([a-fA-F0-9]){6}$/.test("#")        // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#0")       // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#00")      // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#000")     // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#0000")    // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#00000")   // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#000000")  // is a partial match, allow type
/^(#){1}([a-fA-F0-9]){6}$/.test("#000000D") // is not a match, prevent typing

6 个答案:

答案 0 :(得分:1)

使用像maskedinput.js这样的库会更好。 然后,您可以设置文本输入,如下所示:

jQuery(function($){
    $("#your_input").mask("999");
});

<强>更新

您可以使用validator表单和预设特定类型的字段来验证

答案 1 :(得分:1)

您可以使用()?部分验证电子邮件地址以获取更多字母和/或字符。每个()?在验证树中更深入。

以下正则表达式模式逐个字母地验证电子邮件地址。

^[a-zA-Z]+(@{1}[a-zA-Z]*(\.{1}[a-zA-Z]*)?)?$

它没有考虑到那里的所有可能性,但是对于像aa@bb.dd这样的基本功能,它可以正常工作并且还有进一步改进它的空间。

答案 2 :(得分:0)

您可以在表达式中指定一个范围,使其匹配一到三位数之间的任何内容,如下所示:

/^\d{1,3}$/.test("1")  // true
/^\d{1,3}$/.test("12")  // true
/^\d{1,3}$/.test("123a")  // false

答案 3 :(得分:0)

只提供允许部分匹配的正则表达式。例如/^\d{1,3}$/

答案 4 :(得分:0)

根据您的上一次编辑,这应该有效:

/^#[a-fA-F0-9]{0,6}$/

答案 5 :(得分:0)

你想要使用明确的&#34; |&#34;部分匹配。对于您的颜色匹配示例,它非常简单,您只需要显式匹配空字符串部分

/^(|#[a-f0-9]{0,6})$/i.test(inputStr)

对于电子邮件,由于存在更多部分匹配组合,因此它更复杂

/^(|\w+|\w+@|\w+@\w+|\w+@\w+\.|\w+@\w+\.\w+)$/.test(inputStr)

请注意,您无法使用/^(|\w*@|...)$/这样的内容,因为它与@blah.com匹配,而jdbc:sqlserver://localhost;user=MyUserName;password=*****; 不是有效的部分输入。