我希望有人可以帮助我:
我想验证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)如果(逻辑OR)在此代码中完美运行,为什么(逻辑AND)不起作用?
b)为什么(逻辑OR)完美地工作 - 但好像它是(逻辑AND)而不是OR?
(希望有道理:)
我显然错过了一些东西。任何帮助将非常感激。答案 0 :(得分:3)
DeMorgan's laws回答了原因。如果你想同时拥有两者,你必须检查has@ and has.
;失败的是not(has@ and has.)
,它会分解为not(has@) or not(has.)
,我们也可以将其写为hasnt@ or hasnt.
。您当前的代码会检查hasnt@ and hasnt.
,这相当于not(has@ or has.)
(即违反&#34规则的失败;至少有@
或.
,而不一定是&{{1}} #34; - 这不是你想要的规则。)
答案 1 :(得分:0)
如果您希望它同时包含@
和.
,则应检查
email.indexOf('@') > -1 && email.indexOf('.') > -1
或者反过来
email.indexOf('@') == -1 || email.indexOf('.') == -1
请注意,如果indexOf
为-1
,则表示子字符串不。
答案 2 :(得分:0)
您当前的逻辑表明,如果既没有"@"
或"."
,那么执行您的代码(换句话说,如果两者都缺失)。我认为你的逻辑存在缺陷。当您使用&&
时,在执行代码之前,您要求两个条件都为真。由于您正在测试.indexOf() == -1
,这意味着必须丢失这两个字符才能执行您的代码,这可能不是您想要的。
如果您希望字符串中同时需要"@"
或"."
,那么您可以将==
更改为!==
并仍然使用{{1像这样确保两个必需的字符都存在:
&&
简而言之,如果您希望两个条件必须为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
}
}
,则整体结果为&&
,则使用true
。你是对的。但是,您必须确保您正在测试的条件评估为true
,并且您的逻辑就是倒退了。当您测试true
时,您正在测试是否缺少该字符,因此您的逻辑正在测试是否缺少两个字符(不是缺少一个或零,而是两个)。
答案 3 :(得分:0)
基于此website
$ a&& $ b如果$ a和$ b都为TRUE,则为TRUE。
$ a || $ b如果$ a或$ b为TRUE,则为TRUE。
<强>&安培;&安培; (AND)只有在满足条件的 时才有效,否则只有在满足 ||的条件时才会有效(OR)强>
答案 4 :(得分:0)
您希望两个条件都为真,以使电子邮件有效,但您正在检查相反的条件,以便在它失败时捕获。
如果缺少句点或,如果缺少句点,则希望它失败,因此您希望在条件之间使用||
运算符。