2017-09-05 21 views
3

我是javaScript的新手,我面臨的問題是我必須匹配@符號並確保它只允許在字符串中一次。爲此,我編寫了以下正則表達式。正則表達式要求@符號只在字符串中有一次

var regexpat=/[@]{1}/; 
    if(regexpat.test(valu)) 
     testresults = true; 
     else 
     { 
      alert("Please input a valid email address!"); 
      testresults = false; 
     } 

我的正則表達式正在處理以下輸入值:[email protected]@abc.com。但是,如果我提供的輸入值爲"[email protected]"@abc.com,則不會引發警報錯誤消息。

我該如何更改我的正則表達式,以便它可以用於"[email protected]"@abc.com

+0

如果您要驗證的電子郵件地址,我建議你所以搜索,你會發現很多regex'es的。 – ClasG

+1

'valu.replace(/ [^ @] +/g,「」).length == 1'([see here](https://stackoverflow.com/questions/2903542/javascript-how-many-times-一個字符出現在一個字符串中)) –

+0

類似於(?:[a-z0-9!#$%&'* +/=?^ _'{|}〜 - ] +(?:\ [A-Z0-9#$%&'* +/=^_'{|}〜 - !?] +)* |「(?:[\ x01- \ X08 \ X0B \ X0C \ x0e- \ X1F ?\ X21 \ x23- \ x5b \ x5d- \ 0x7F部分] | \\ [\ x01- \ X09 \ X0B \ X0C \ x0e- \ 0x7F部分)*「)@(:(:[A-Z0-9] (?:[A-Z0-9 - ] * [A-Z0-9])?\)+ [A-Z0-9](?:[A-Z0-9 - ] * [A-Z0-9 ])|?\ [(:(?: 25 [0-5?] | 2 [0-4] [0-9] |?[01] [0-9] [0-9])\)。 {3}(?: 25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9] |?[A-Z0-9 - ] * [A-Z0-9]:(?:[\ x01- \ X08 \ X0B \ X0C \ x0e- \ X1F \ x21- \ X5A \ x53- \ 0x7F部分] | \\ [\ x01- \ X09 \ X0B \ X0C \ x0e- \ x7f])+)\]) – Manav

回答

0

最簡單的方法也可以用於此的split("@")

var value = '[email protected]@'; 
 
if(value.split("@").length === 2){ 
 
    testresults = true; 
 
}else{ 
 
    alert("Please input a valid email address!"); 
 
    testresults = false; 
 
}  
 
    

@只是分割你的字符串,因爲你需要@只出現一次,必須有一個數組長度爲2,因此您可以將數組與長度2進行比較。如果數組長度大於2,則存在多於一次的發生@

+0

謝謝AKA,這適用於我的要求。 – user46777

2

您的正則表達式只是測試字符串中是否有單個@,它不拒絕多個。用途:

var regexppat = /^[^@][email protected][^@]+$/; 

此相匹配的是@由一款不@字符包圍。

var valu; 
 
var regexpat = /^[^@][email protected][^@]+$/; 
 

 
while (valu = prompt("Enter email")) { 
 
    if (regexpat.test(valu)) 
 
    console.log(valu + " is valid"); 
 
    else { 
 
    console.log(valu + " is invalid"); 
 
    } 
 
}

+0

嗨Barmar,但對於像「[email protected]"@abc.com這樣的引號輸入它應該去else循環。我用你的正則表達式,然後它也不會去else循環。 – user46777

+0

我已經添加了一個可執行代碼片段,顯示它的工作原理。在提示符中輸入'「abc @」@ abc.com'。 – Barmar

0

電子郵件正則表達式是不是隻是一個@字符剛剛的發生得多了,。這是W3C Spec指定的電子郵件正則表達式(例如用於<input type="email">):

/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-][email protected][a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/ 
相關問題