簡體   English   中英

在這種情況下,正則表達式中的'['是什么(2個問題)

[英]what is the '[' in Regex in this context ( 2 problems)

我的最終正則表達式(更新):

^[A-z0-9]*([\\.]?\\w*)*[A-z0-9]+@[A-Za-z0-9]([\\.]?\\w+)+\\.[A-Za-z][A-Za-z][A-Za-z]$

第一個問題

我知道方括號[]用於字符集/類,但我不明白的是為什么它不需要一個右括號,並導致我的Reg-ex行為奇怪。 例如,這是最初的

[A-z0-9]*[\.?[\w+]+[A-z0-9]+@[A-Za-z0-9][\.?[A-Za-z0-9+]+\.[A-Za-z][A-Za-z][A-Za-z]
Matches ----> reg.ex.email@gmail.com

注意第二個[\\.之前\\. 以及第六個[在第二個之前\\. 這兩個沒有任何結束括號。 我也知道嗎? 表示零或前一個元素之一。 當我刪除支架9]*\\.?[\\w正則表達式不會重新調整reg. 字符串的一部分。 我也嘗試添加一個右括號[\\.?[\\w+]][\\.?][\\w+] ,但它也會導致相同的行為,請注意第一個[\\.?[\\w+]]會導致它根本不識別字符串。 誰能幫助解釋這種行為?

第二個問題

基於上面的Regex,我使用JavaScript正則表達式來測試我的字符串。 而且我不知道為什么測試正在通過,即使只有部分字符串通過了測試。 我的一些測試用例

reg@asld@fja.com
reg.exp.email@gmial@gmail.com
reg.exp.email@gm@il.com
reg.exp.themail@gmail.com

我應該澄清reg.exp.themail@gmail.com應該通過

如果你去這個網站並通過我的正則表達式和測試字符串你可以看到我的意思。 在我的JavaScript中,我有這個

var inputVal = $(this).val();       
    var re = /[A-z0-9]*[\.?[\w+]+[A-z0-9]+@[A-Za-z0-9][\.?[A-Za-z0-9+]+\.[A-Za-z][A-Za-z][A-Za-z]/;
    if (!re.test(inputVal)) {
        $("#emailValidate").css({"display": "inline-block", "color":"red","margin-top":"4px"});          
    } else {
        $("#emailValidate").css("display", "none");
    }

上面的測試用例通過了哪個。 對這一個有什么想法嗎?

回答第一個問題

包括一個開括號[在一個字符類中很好,並且它不會在第一個中創建另一個字符類。 這就是為什么在不轉義字符類的情況下包含它的原因。

回答第二個問題

你需要在行首^和行尾$ anchors之間包含你的模式,這樣它就匹配整個輸入字符串而不是像這樣的部分:

^[A-z0-9]*[\.?[\w+]+[A-z0-9]+@[A-Za-z0-9][\.?[A-Za-z0-9+]+\.[A-Za-z][A-Za-z][A-Za-z]$
|                                                                                   |
Start-Of-Line                                                             End_Of_Line

Regex101演示

我知道它已經回答了,但^ $單獨不回答所有我的問題。 2'['字符仍然無用。 例如,正則表達式的第一部分(在@之前)僅允許電子郵件地址中最多1個點,並且唯一使其與多個點匹配的是額外的'['但不應該具有此效果。 我想現在我發現它本來應該是最初的:

^[A-z0-9]*(\.?\w+)+@...

當我在內部[]而不是()如上所述時,w之后的+對原始正則表達式也沒有影響。 或者如果傑克想要只匹配2個點,那么:

^[A-z0-9]*(\.\w+){2}@...

我只是不相信額外的'['和[+]內部的'+'使它成為一個可靠的模式。 如果我錯了,請糾正我的嗅探器。

暫無
暫無

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

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