簡體   English   中英

JS,RegExp,奇怪的行為

[英]JS, RegExp, weird behavior

我使用簡單的正則表達式模式來驗證電子郵件地址,我發現這種模式:

^[^@]+@[^@]+\.[^@]+$

當我檢查regex101上的模式時,它的行為符合預期(意味着它不匹配例如email@abcde )。

所以以下行:

/^[^@]+@[^@]+\.[^@]+$/.test('email@abcde'); // false

但:

let patt = new RegExp('^[^@]+@[^@]+\.[^@]+$');
patt.test('email@abcde'); // true

什么?! ,我測試了chrome和firefox,同樣的行為,任何人都可以解釋一下嗎?

\\. 字符串文字中不是有效的轉義序列,它只是解析為. 這意味着您在第二個示例中使用的正則表達式等效於

^[^@]+@[^@]+.[^@]+$

並且. 匹配任何角色。

如果將兩個正則表達式都記錄到控制台,則可以輕松查看差異:

在此輸入圖像描述

問題在於\\. 被評估為. 在你的正則表達式。 換句話說,你的正則表達式是有效的: ^[^@]+@[^@]+.[^@]+$

要修復,請使用//正則表達式分隔符:

patt = /^[^@]+@[^@]+\.[^@]+$/
patt.test("email@abcde") // false
patt.test("email@abcde.com")  // true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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