[英]Need to write regular expression in javascript which matches a particular pattern(digit/decimal - digit/decimal) in entire string
[英]Regular expression which matches a pattern, or is an empty string
我有以下匹配 email 地址格式的正则表达式:
^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$
这用于验证使用 JavaScript 的表单。但是,这是一个可选字段。 因此,如何更改此正则表达式以匹配 email 地址格式或空字符串?
根据我有限的正则表达式知识,我认为\b
匹配一个空字符串,并且|
表示“或”,所以我尝试执行以下操作,但没有成功:
^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b
要匹配pattern
或空字符串,请使用
^$|pattern
^
和$
分别是字符串锚点的开头和结尾。|
用于表示交替,例如this|that
。\\b
\\b
在大多数情况下是一个“词边界”锚点。 它是一个零宽度匹配,即一个空字符串,但它只在非常特定的地方匹配那些字符串,即在单词的边界处。
也就是说, \\b
位于:
\\w
和\\W
(任意顺序):
^
和\\w
\\w
开头\\w
和$
\\w
结尾根据规范,这不是微不足道的。
另一种方法是将您的正则表达式放在非捕获括号中。 然后使用?
限定符,它将查找未捕获组的 0(即空字符串)或 1 个实例。
例如:
/(?: some regexp )?/
在您的情况下,正则表达式将如下所示:
/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/
没有|
“或”运算符必备!
这是 JavaScript 正则表达式语法的 Mozilla 文档。
我不确定您为什么要验证可选的电子邮件地址,但我建议您使用
^$|^[^@\s]+@[^@\s]+$
意义
^$ empty string
| or
^ beginning of string
[^@\s]+ any character but @ or whitespace
@
[^@\s]+
$ end of string
无论如何,您都不会阻止虚假电子邮件,这样您也不会阻止有效地址。
\\b 匹配单词边界。 我认为您可以将 ^$ 用于空字符串。
如果正则表达式中有多个模式, ^$对我不起作用。
另一个解决方案:
/(pattern1)(pattern2)?/g
“pattern2”是可选的。 如果为空,则不匹配。
? 在零到一次之间匹配 (pattern2)。
在这里测试(“m”用于多行示例): https://regex101.com/r/mezfvx/1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.