【问题标题】:Javascript Regular Expression - Limit number of valid charactersJavascript 正则表达式 - 限制有效字符数
【发布时间】:2013-11-16 19:31:34
【问题描述】:

我正在学习 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)

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

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

我还应该补充一点,我完全理解这不是一个完整的电子邮件验证表达式。对我来说,这纯粹是一个试图理解正则表达式的问题。我正在四处寻找一个明确的答案,但找不到我想要的确切答案。

谢谢

【问题讨论】:

标签: javascript regex validation email


【解决方案1】:

您需要转义最后一个.。否则,它表示“匹配任何字符”,因此表达式正在捕获这些块:

this
@
brok
en

尝试:

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

【讨论】:

  • 太棒了,谢谢!也感谢您在回复中添加块。这绝对帮助我想象正在发生的事情。
【解决方案2】:

. 将匹配任何字符。要匹配实际的 .,您需要 \.

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

【讨论】:

    【解决方案3】:

    由于您要查找大写或小写字母,您可以通过不区分大小写来简化搜索。正则表达式末尾的 /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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多