簡體   English   中英

與模式匹配或為空字符串的正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM