2017-06-13 86 views
3

試圖寫在電子郵件驗證檢查全角字符香菜: -香菜+無法驗證電子郵件地址將全角字符

JS代碼: -

window.Parsley.addValidator('validateFullWidthCharacters', { 
    validateString: function(_value) { 
    regex = /[\u3000-\u303F]|[\u3040-\u309F]|[\u30A0-\u30FF]|[\uFF00-\uFFEF]|[\u4E00-\u9FAF]|[\u2605-\u2606]|[\u2190-\u2195]|\u203B/; 
    if (regex.test(_value)) { 
     return false; 
    } else { 
     return true; 
    } 
    }, 
    messages: { 
    en: 'Please enter a valid email address.' 
    } 
}); 

工作正常,並通過驗證電子郵件給錯誤消息

[email protected]

但如果我改變了電郵到下面一個,不工作

[email protected]

<input placeholder="e.g. [email protected]" class="form-control parsley-success" id="user_email" data-parsley-required="" data-parsley-type="email" data-parsley-validate-full-width-characters="true" type="email" value="" name="user[email]" data-parsley-id="17"> 

請給予建議,以解決此問題。

+1

你的問題應該被打上標籤的正則表達式IMO –

回答

3

你的正則表達式匹配只是全角字符,必須與普通字符來測試你的價值。

有錯誤或可能的「預期行爲」與INPUT TYPE =「電子郵件」,它的全角字符轉換成正常的,如果它是有效的,直到@。

一個爲你解決辦法是改變TYPE =「電子郵件」爲type =「text」和使用另一種模式用於電子郵件和編輯,如果你要regex.test返回,而不是

regex = /^([a-z0-9_\.-]+\@[\da-z\.-]+\.[a-z\.]{2,6})$/gm 

新的測試

regex = /^([a-z0-9_\.-]+\@[\da-z\.-]+\.[a-z\.]{2,6})$/gm 
/^([a-z0-9_\.-]+\@[\da-z\.-]+\.[a-z\.]{2,6})$/gm 
regex.test('[email protected]mail.com') 
false 
regex.test('rahul@mail.com') 
false 
regex.test('[email protected]') 
true 

您的代碼將變成:

window.Parsley.addValidator('validateFullWidthCharacters', { 
    validateString: function(_value) { 
    regex = /^([a-z0-9_\.-]+\@[\da-z\.-]+\.[a-z\.]{2,6})$/gm; 
    return regex.test(_value); 
    }, 
    messages: { 
    en: 'Please enter a valid email address.' 
    } 
}); 

HTML

<input placeholder="e.g. [email protected]" class="form-control parsley-success" id="user_email" data-parsley-required="" data-parsley-type="email" data-parsley-validate-full-width-characters="true" type="text" value="" name="user[email]" data-parsley-id="17"> 

window.Parsley 
 
     .addValidator('validateFullWidthCharacters', { 
 
      requirementType: 'string', 
 
      validateString: function (value, requirement) { 
 
       regex = /^([a-z0-9_\.-]+\@[\da-z\.-]+\.[a-z\.]{2,6})$/gm; 
 
       return regex.test(value); 
 
      }, 
 
      messages: { 
 
       en: 'Please enter a valid email address.' 
 
      } 
 
     });
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/parsley.js/2.7.2/parsley.min.js"></script> 
 
</head> 
 
<body> 
 

 
<form data-parsley-validate> 
 
    <input type="text" name="email" placeholder="e.g. [email protected]" data-parsley-validate-full-width-characters="true"> 
 
    <button>Submit</button> 
 
</form> 
 

 
</body> 
 
</html>

+0

regex.test('[email protected]') 仍然沒有工作。 – Rubyist

+0

@Rubyist你想接受還是拒絕'[email protected]'?與新的正則表達式,它將接受只有普通字符的電子郵件 –

+0

我想拒絕此電子郵件,因爲電子郵件地址中的全角字符。 – Rubyist

1

上運行電子郵件字符串驗證之前嘗試刪除從字符串中的所有多餘的空格。

像這樣

tr = str.replace(/\s+/g, '');

+0

請訪問https://fullwidthtext.blogspot.in/並鍵入任何電子郵件地址。 – Rubyist

+0

他的例子有沒有空格嘿嘿 –

相關問題