Javascript正则表达式 - 限制有效字符数

时间:2013-11-16 19:31:34

标签: javascript regex validation email

我正在学习javascript中的正则表达式,我认为有些东西我不知道。

我正在使用一个示例,我正在尝试从字符串中提取有效的电子邮件地址。我收到了有效的电子邮件,但我也收到了无效的电子邮件。这是代码:

var teststring = "This is my test string with a valid email: this@that.com,
             and an invalid email: this@broken.1. Pull only the valid email.";

teststring.match(/[A-Za-z0-9_+.-]+@[A-Za-z0-9]+.[A-Za-z]{2,3}/g)

当我运行匹配方法时,我收到有效的电子邮件“this@that.com”,并返回无效的电子邮件“this@broken.1”。

我认为最后一个方括号末尾的{2,3}应该指定括号内的特定字符搜索只有在包含2到3个条件实例时才有效,那么为什么在最后一个点返回后,只有“1”的电子邮件损坏了吗?

我还应该补充一点,我完全理解这不是所有电子邮件验证表达式的全部结束。这对我来说纯粹是一个试图理解的正则表达式问题。我正在寻找一个明确的答案,但无法找到我正在寻找的确切内容。

由于

3 个答案:

答案 0 :(得分:1)

.将匹配任何角色。要匹配您需要的实际. \.

teststring.match(/[A-Za-z0-9_+.-]+@[A-Za-z0-9]+\.[A-Za-z]{2,3}/g)

答案 1 :(得分:1)

你需要逃脱最后.。否则,它意味着“匹配任何字符”,因此表达式正在捕获这些块:

this
@
brok
en

尝试:

teststring.match(/[A-Za-z0-9_+.-]+@[A-Za-z0-9]+\.[A-Za-z]{2,3}/g)

答案 2 :(得分:0)

由于您正在寻找大写或小写字母,因此您可以通过使其不区分大小写来简化搜索。正则表达式末尾的/ g使匹配成为全局(即返回所有这些匹配);你可以使用/ i,如果你只想要一场比赛,但你不关心案例。例如,

"CaSe InSeNsItIvE iS cOoL; I lOvE cAsEs".match(/case/i)

返回单元素数组[“CaSe”]。要获得所有不区分大小写的匹配项,只需使用/ gi:

"CaSe InSeNsItIvE iS cOoL; I lOvE cAsEs".match(/case/gi)

返回[“CaSe”,“cAsE”]

您的查询可以缩短为

teststring.match(/[A-Z0-9_+.-]+@[A-Z0-9]+\.[A-Z]{2,3}/gi)