Javascript RegEx 部分匹配

Javascript RegEx partial match

本文关键字:RegEx Javascript      更新时间:2023-09-26

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

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

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

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

问题是没有值会匹配,因为"1"不是完全匹配,并且不允许我键入它。

有没有办法在javascript中测试正则表达式的部分匹配?

/^'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

我有一个文本框插件,其中包含基于正则表达式的输入限制。

则表达式可以是任何颜色,十六进制颜色正则表达式,例如:(#({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

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

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

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

它没有考虑到所有的可能性,但对于像 aa@bb.dd 这样的基本可能性,它工作得很好,并且还有进一步改进的空间。

最好

使用像maskedinput.js这样的库。然后,您可以按如下方式设置文本输入:

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

更新

您可以对表单使用验证器,并预设特定类型的字段进行验证

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

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

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

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

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

使用显式的"|"部分匹配。对于您的颜色匹配示例,它非常简单,您只需要显式匹配一个空字符串部分

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

对于电子邮件,它更复杂,因为有更多的部分匹配组合

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

请注意,您无法摆脱像/^(|'w*@|...)$/这样的东西,因为它与不是有效部分输入的@blah.com匹配。