在用户输入开始时检查@的javascript验证:不是电子邮件验证

时间:2010-12-06 22:35:16

标签: javascript

我必须检查表单字段是否在用户输入&开头包含'@'。它是否包含它。它可以正常检查它是否在字符串的开头。但是当我添加检查输入是否包含“@”时。它失败。这是我的代码

  function email_valid(field) 
    { 
      var apos=field.update.value;
          apos=apos.indexOf('@');
            if (apos>0 ||((apos.contains('@')== 'FALSE')))
              { alert('plz enter valid input');
                return false;
              }
            else 
            { return true; }
    }

修改

此表单中的此功能正在检查@是否位于第1位和完全是否在输入中。

   function @_valid(field) 
        { 
          var ref=field.update.value;// I needed ref 4 other things
          var apos=ref.indexOf('@');
          if (apos>=0 )
             {
               if (apos==0)
                   {
                    return true;
                   }
                 else { field.t_update3.value=""; 
                        alert('plz enter a valid refernce');
                        return false;
                      }
                     }
                   else { field.t_update3.value=""; 
                         alert('plz enter a valid refernce');
                         return false;
          }         }

9 个答案:

答案 0 :(得分:1)

为什么不

if (apos !== 0) { /* error; */ }

当您的输入(据我所知)有效时,“apos”值将为数值零,无效时为-1或大于0。

这对于让您的网站用户这样做似乎很奇怪,但无论如何。 (如果它根本不存在,必须才有效,为什么不能为用户添加“@”?)

答案 1 :(得分:1)

考虑:

var apos = value.indexOf('@');
if (apos >= 0) {
  // was found in string, somewhere
  if (apos == 0) {
    // was at start
  } else {
    // was elsewhere
  }
} else {
  // not in string
}

var apos = value.indexOf('@');
if (apos == 0) {
  // was at start
} else if (apos > 0) {
  // was elsewhere
} else {
  // not in string
}

答案 2 :(得分:0)

您可以检查以确保其大于-1。 Javascript的indexOf()将返回您正在寻找的字符的当前索引,如果它不在字符串中,则返回-1。

编辑误读了一下。还要确保它不等于0,因此它不在字符串的开头。

答案 3 :(得分:0)

在第二个if条件中,apos是一个数字,而不是字符串。

你正在尝试写

if (field.update.value.charAt(0) == '@' && field.update.value.indexOf('@', 1) < 0)

答案 4 :(得分:0)

function email_valid(field) 
    { 
      var fieldValue =field.update.value;
      var apos = apos.indexOf('@');
            if (apos > 0 || apos < 0)//could also use apos !== 0
              { alert('plz enter valid input');
                return false;
              }
            else 
            { return true; }
    }

aposindexOf返回的值,如果用户输入中没有@,则为-1。如果它是第一个字符,它将为0。如果用户输入包含@,则大于0。 JavaScript在String上没有contains方法。

答案 5 :(得分:0)

尝试:

function email_valid(field) {
    //var apos=field.update.value;
    var apos = field;
    //apos=apos.indexOf('@');
    apos = apos.indexOf('@');
    if( (apos < 0) ) {
        //alert('plz enter valid input');
        alert('false');
    } else {
        alert('true');
    }
}
email_valid('blah');

在任何地方检查@。或者,如果您想在开头检查@,请将if( (apos < 0) ) {更改为if( (apos == 0) ) {。或者,如果您想确保它不在开头,那么if( (apos > 0) ) {

答案 6 :(得分:0)

如果找不到字符串,

将为-1。所以你的代码应该如下:

function email_valid(field) 
{ 
  var apos=field.value;
      apos=apos.indexOf('@');
        if (apos<=0) // handles '@' at the beginning and not in string at all.
        {
            alert('plz enter valid input');
            return false;
        }
        else 
        { return true; }
}

我还更改了您的初始分配以删除.update部分,因为当field是对输入的引用时,它会导致失败。

答案 7 :(得分:0)

了解正则表达式(如果还没有)。然后查找Javascript的String#match。没有必要找到输入以“@”开头,好像包含一个“@”,如果“@”位于字符串的开头,它也将返回true。

此外,免费,return truereturn false通常是糟糕的风格。只需将传递的内容返回if(评估为布尔值)。

总而言之:

function validate_input(str) {
    return str.match(/@/);
}

我建议将函数传递给字符串(field.value或某些 - 而不是字段本身),因为它使它更通用。

答案 8 :(得分:0)

更新:根据评论修改了答案。如果值在第一个字符处包含“@”符号,则以下代码仅返回true。

如果这是一个JavaScript问题,那么这应该没问题。

function email_valid(field){ 
  var apos=field.update.value;
  if(apos.indexOf('@') != 0){
    alert('plz enter valid input');
    return false;
  } else {
    //field contains an '@' at the first position (index zero)
    return true;
  }
}

那就是说,你的参数“field”如果它实际上是指一个输入字段元素,应该只需要这个代码来获取值(例如我不确定“.update”位在哪里发挥作用)

var apos = field.value;

如果没有对某些更适合命名的内容进行“电子邮件验证”,我也会重命名此功能。