簡體   English   中英

我該如何編寫稱為validate(z)的函數,該函數將字符串作為參數,如果包含1個“ @”符號和至少1個“。”,則返回true;否則返回false

[英]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.

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