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

在用户输入开始时检查@的javascript验证:不是电子邮件验证,javascript,Javascript,我必须检查表单字段在用户输入开始时是否包含“@”,它是否包含它。它可以很好地检查它是否位于字符串的开头。但当我添加检查输入是否包含@时。它失败了。这是我的密码 function email_valid(field) { var apos=field.update.value; apos=apos.indexOf('@'); if (apos>0 ||((apos.contains('@')== 'FALSE')))

我必须检查表单字段在用户输入开始时是否包含“@”,它是否包含它。它可以很好地检查它是否位于字符串的开头。但当我添加检查输入是否包含@时。它失败了。这是我的密码

  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; }
    }
编辑

此表单中的此函数检查@是否位于第一位,第二位是否位于输入中


您只需检查以确保apos大于-1。Javascript的indexOf()将返回要查找的字符的当前索引,如果字符串中没有,则返回-1

编辑有点误读。还要确保它不等于0,以便它不在字符串的开头。

为什么不只是

if (apos !== 0) { /* error; */ }
当您的输入(据我所知)有效时,“apos”值将是数字值零,当输入无效时为-1或大于0


这似乎是一个奇怪的事情,让你的网站的用户做,但无论如何。(如果它根本不存在,并且它必须存在才能有效,为什么不能为用户添加“@”?

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

你在试着写作

if (field.update.value.charAt(0) == '@' && field.update.value.indexOf('@', 1) < 0)
if(field.update.value.charAt(0)='@'和&field.update.value.indexOf('@',1)<0)
功能电子邮件\u有效(字段)
{ 
var fieldValue=field.update.value;
var apos=apos.indexOf('@');
if(apos>0 | | apos<0)//也可以使用apos!==0
{警报('plz输入有效输入');
返回false;
}
其他的
{返回true;}
}
apos
是返回的值,如果用户输入中没有
@
,则该值将为-1。如果是第一个字符,则为0。如果用户输入包含
@
,则该值将大于0。JavaScript在字符串上没有
包含
方法。

尝试:

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');
功能电子邮件\u有效(字段){
//var apos=field.update.value;
var-apos=场;
//apos=apos.indexOf('@');
apos=apos.indexOf('@');
如果((载脂蛋白<0)){
//警报(“plz输入有效输入”);
警报(“假”);
}否则{
警报(“真”);
}
}
电子邮件无效(“废话”);

在任何地方检查
@
。或者,如果要在开始时检查
@
,请将
if((apos<0)){
更改为
if((apos==0)){
。或者,如果要确保它不在开始处,则如果未找到字符串,则
if((apos>0)){
apos将为-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; }
}
功能电子邮件\u有效(字段)
{ 
var apos=字段值;
apos=apos.indexOf('@');

if(apos如果您还没有了解正则表达式,那么请查找Javascript。无需查找输入是否以“@”开头,就好像它包含一个“@”,如果“@”位于字符串开头,该“@”也将返回true

另外,免费的,
return true
return false
通常是不好的样式。只需将传递给
if
(计算结果为布尔值)的内容返回即可

总而言之:

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

我建议给函数传递一个字符串(
field.value
或类似的字符串),而不是字段本身,因为它使函数更通用。

更新:根据注释修改答案。只有当值在第一个字符处包含“@”符号时,下面的代码才会返回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 = value.indexOf('@');
if (apos >= 0) {
  // was found in string, somewhere
  if (apos == 0) {
    // was at start
  } else {
    // was elsewhere
  }
} else {
  // not in string
}


@cdhowie,不,这不是电子邮件验证。输入开始时我需要“@”。
field.update.value
?什么是
update
子项?@exceptive:Oops,对不起。我仍然更正了你的标题,因为这与PHP没有任何关系。@cdhowie,但我没有添加PHPtag@scunliffe:在任何屏幕上都没有
$
前缀变量。这不能是PHP.How数字?因为它将包含输入的值user@XCeptable:在您编写
apos=apos.indexOf('@')之后
@Pointy,该条件是否会检查两个@是否都位于输入的第一位&它也存在于输入中???@Exceptable:是。
apos
如果字符不存在,则为-1;如果字符存在,则大于0,但不作为第一个字符。返回值0表示“字符在字符串中,它出现在最开始的地方。”这不会检查它是否在以后出现。是的,它会检查。如果“@”出现在字符串中第一个字符之后的某个位置,则“apos”将是一个正数。据我所知,整点都是为了确保输入字符串以”@"字符。现在,考虑到这个问题的奇怪措辞,我当然可能是错的。@Pointy,实际上我想确保,正如SLaks所说的,要么它在1,要么它根本不在字符串中。这根本不是检查任何东西。我已经做了一个函数,它在我想要的情况下工作,我在EDIT2sholsinger中输入,它在一个时间内不检查任何东西ll在发布这个问题之前,我尝试了这个,即(apos>0 | | apos<0),但它不起作用。!==0正如Pointy提到的那样也不起作用。我在编辑中添加了代码,可以很好地检查这两个条件。虽然我自己做了,但它与您的答案完全相同(我添加到编辑中).也许你的回答帮助我获得了信心,我的解决方案不仅仅是一种权宜之计。非常感谢
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;
  }
}
var apos = field.value;
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
}