![](/img/trans.png)
[英]How do I write a function called countDots(x) that takes a string as an argument and returns the number of dots (.) it contains
[英]How can i write function called validate(z) which takes a string as argument & return true if contain 1 “@” symbol & at least 1 “.” & false otherwise
我剛剛開始學習功能,發現它很困難。
我學會了一些不同的功能,但是我從來沒有做過這樣的功能。
如何編寫一個稱為validate(z)的函數,該函數將字符串作為參數,如果包含一個@
符號和至少一個點,則返回true .
否則為假。
例如, if z = "stack@overflow.co.uk"
該函數將返回true
。
對於這樣一個簡單的要求,正則表達式似乎有些矯kill過正。 我會喜歡這樣的東西
function validate(z) {
var hasDots = z.indexOf('.') !== -1,
firstAt = z.indexOf('@'),
lastAt = z.lastIndexOf('@');
return hasDots && firstAt !== -1 && firstAt === lastAt;
}
聽起來您正在尋找的是電子郵件驗證功能。 這些比您想象的要難得多。 您必須驗證長度和格式。 在使用(非常復雜的)正則表達式語句的所有實現中,這對我來說效果很好。
function validateEmail(v) {
var r = new RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");
return (v.match(r) == null) ? false : true;
}
您可以使用正則表達式。
function validate(z) {
var re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
return re.test(z);
}
對於點,使用indexOf
在輸入中搜索字符:
function contains(z, c) {
return z.indexOf(c) !== -1;
}
要檢查單個@
,您可以說
function contains_one(z, c) {
var first = z.indexOf(c);
var last = z.lastIndexOf(c);
return first !== -1 && first == last;
}
function validate(z) {
return contains_one(z, '@') && contains(z, '.');
}
如果您更喜歡使用regexp:
function validate(z) {
return /^[^@]*@[^@]*\.[^@]*$/.test(z);
}
這表示要求先輸入非符號序列,然后再輸入符號,然后再輸入非符號序列,再輸入一個圓點,再輸入一個非符號序列。 您可能要對此進行調整。 例如,它堅持點應位於at符號的右側。 而且,它允許點在符號后立即出現,或在輸入末尾出現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.