Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的| | |(或)行为像&&(和)?_Javascript_Validation_Email_Logical Operators - Fatal编程技术网

Javascript 为什么我的| | |(或)行为像&&(和)?

Javascript 为什么我的| | |(或)行为像&&(和)?,javascript,validation,email,logical-operators,Javascript,Validation,Email,Logical Operators,我希望有人能在这里帮助我: 我想在HTML表单上验证用户输入的电子邮件地址。我希望在用户输入字符串中同时显示“@”符号和“.”句点 以下是我的代码,用于检查是否存在这种情况: function email_checker(id_name){ var email = document.getElementById(id_name).value; if (email.indexOf('@') == -1 && email.indexOf('.') == -1){

我希望有人能在这里帮助我:

我想在HTML表单上验证用户输入的电子邮件地址。我希望在用户输入字符串中同时显示“@”符号和“.”句点

以下是我的代码,用于检查是否存在这种情况:

function email_checker(id_name){
    var email = document.getElementById(id_name).value;
    if (email.indexOf('@') == -1 && email.indexOf('.') == -1){
    do this code
    }
}
奇怪的是,它使用| |逻辑OR运算符而不是&。所以,我想这个问题在这个意义上是双重的

a如果逻辑AND在这段代码中工作得很好,为什么逻辑AND不工作

b为什么逻辑OR工作得很完美——但却像逻辑AND而不是OR一样工作

希望这是有意义的:


我显然错过了什么。任何帮助都将不胜感激

如果您希望它同时具有@和。,您应该检查

email.indexOf('@') > -1 && email.indexOf('.') > -1
或者相反

email.indexOf('@') == -1 || email.indexOf('.') == -1

请记住,如果indexOf为-1,则表示子字符串不存在。

回答了原因。如果你想两者兼得,你必须检查has@和has。;它的失败是nothas@和has.,它分解成nothas@或nothas.,我们也可以写为hasnt@或hasnt。。您当前的代码检查hasnt@和hasnt.,这相当于nothas@或has。i、 e.违反规则的失败至少有@或。,不一定同时有@或。,这不是您想要的规则。

您当前的逻辑是,如果既没有@或a,则执行代码,换句话说,如果两者都缺失。我认为是你的逻辑有缺陷。当您使用&&时,您需要这两个条件都为true,然后它才能执行您的代码。由于您正在测试.indexOf==-1,这意味着它必须同时缺少这两个字符才能执行您的代码,这可能不是您想要的

如果你想要一个@或一个。要在字符串中为必填项,则可以将==更改为!==并且仍然使用&&like this来确保两个必需的字符都存在:

function email_checker(id_name){
    var email = document.getElementById(id_name).value;
    // test to make sure neither required character is missing
    if (email.indexOf('@') !== -1 && email.indexOf('.') !== -1){
       // both . and @ are present
       // execute code here
    }
}
简言之,如果希望两个条件都为真,则使用&&以使总体结果为真。你说得对。但是,您必须确保您正在测试的条件的计算结果为真,并且您的逻辑是向后的。当您测试==-1时,您正在测试是否缺少字符,因此您的逻辑正在测试两个字符是否都缺少,不是缺少一个或零个,而是缺少两个

基于此

如果$a和$b都为TRUE,则为$a&&$b和TRUE

$a | |$b或TRUE,如果$a或$b为TRUE


&&并且只有当两个条件都满足时才有效,否则只有当一个条件满足时才有效,即| |或

您希望两个条件都为真,电子邮件才有效,但您正在检查相反的条件,以便在失败时捕获

如果at缺失或周期缺失,您希望它失败,因此您希望在两个条件之间使用| |运算符。

提供以这种方式工作的电子邮件的确切值。不可复制: