Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式-限制有效字符数_Javascript_Regex_Validation_Email - Fatal编程技术网

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

Javascript正则表达式-限制有效字符数,javascript,regex,validation,email,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."; test

我正在学习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”的破损电子邮件呢

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


谢谢

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

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

您需要转义最后一个
。否则,它意味着“匹配任何字符”,因此表达式将捕获以下块:

this
@
brok
en
尝试:


因为您要查找大写或小写字母,所以可以通过使其不区分大小写来简化搜索。正则表达式末尾的/g使匹配成为全局匹配(即返回所有此类匹配);如果您只需要一个匹配项,但不关心case,则可以使用/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)

我知道你这么做只是为了学习,但这不应该被忽视,太棒了,谢谢!也谢谢你在回复中添加了这些内容。这确实帮助我想象发生了什么。
teststring.match(/[A-Z0-9_+.-]+@[A-Z0-9]+\.[A-Z]{2,3}/gi)