Javascript 如何检查变量';s值是否在数组中?

Javascript 如何检查变量';s值是否在数组中?,javascript,html,arrays,Javascript,Html,Arrays,我在一个空的html中设置了注册和登录选项(不是在网页上),只是想看看我是否可以以及如何做到这一点。现在我遇到了一个问题-我可以注册多个具有相同值的用户名(例如,我可以注册“测试用户名”任意次数)。 我想知道如何检查用户输入的注册值是否已注册。 这是我的密码: HTML: <!-- Login --> <div class="login"> <label>Login</label> <input type="text" id="login-u

我在一个空的html中设置了注册和登录选项(不是在网页上),只是想看看我是否可以以及如何做到这一点。现在我遇到了一个问题-我可以注册多个具有相同值的用户名(例如,我可以注册“测试用户名”任意次数)。
我想知道如何检查用户输入的注册值是否已注册。
这是我的密码:

HTML:

<!-- Login -->
<div class="login">
<label>Login</label>
<input type="text" id="login-username" class="textbox"  placeholder="Username"/>
<input type="password" id="login-password" class="textbox" placeholder="Password"/>
<button type="submit" onclick="login()">Login</button>
</div>

<!-- Register -->
<div class="register">
<label>Register</label>
<input type="text" id="register-username" class="textbox" placeholder="Username"/>
<input type="password" id="register-password" class="textbox" placeholder="Password"/>
<button type="submit" onclick="register()">Register</button>
</div>

使用
Object.prototype
中的toString方法

if( Object.prototype.toString.call( Variable ) === '[object Array]' ) {
    alert( 'Array!' );
}
试试这个

function register(){
   var users = JSON.parse(localStorage.getItem('users')) || [];
   var username = document.getElementById("register-username").value;
   var password= document.getElementById("register-password").value;
   var toBeRegister= true;
   for(i=0;i<users.length;i++){
      if(users[i].username === username){
         toBeRegister = false
      }
   }
   if(toBeRegister){
      users.push({username:username,password:password})
      localStorage.setItem('users', JSON.stringify(users));
   }
}
函数寄存器(){
var users=JSON.parse(localStorage.getItem('users'))| |[];
var username=document.getElementById(“注册用户名”).value;
var password=document.getElementById(“注册密码”).value;
var toBeRegister=真;

因为(i=0;i多亏了Rajesh,我才能够让它工作,下面是如何做到的:

我只是用他的方法检查用户输入的用户名是否在usernameAlpha中。如果是,我会显示一条警告消息“username take”,如果不是,我会像平常一样注册用户

代码如下:

function register() {
if(usernameAlpha.indexOf(document.getElementById("register-username").value) > -1) {alert("Username taken")
    } else if (username1 == null && password1 == null && document.getElementById("register-username").value != "" && document.getElementById("register-password").value != "") {
    localStorage.removeItem("username1");
    localStorage.setItem("username1", document.getElementById("register-username").value);
    localStorage.removeItem("password1");
    localStorage.setItem("password1", document.getElementById("register-password").value);
    alert("Hi, " + document.getElementById("register-username").value + " is now registered.");
    location.reload();

    } else if (username2 == null && password2 == null && document.getElementById("register-username").value != "" && document.getElementById("register-password").value != "") {
    localStorage.removeItem("username2");
    localStorage.setItem("username2", document.getElementById("register-username").value);
    localStorage.removeItem("password2");
    localStorage.setItem("password2", document.getElementById("register-password").value);
    alert("Hi, " + document.getElementById("register-username").value + " is now registered.");
    location.reload();
    }
}

您提到了“array”,但没有很好地使用它们。您仍然有变量
username1
username2
,这意味着您必须(再次)复制一组代码如果您想引入
username3
。如果您构建一个用户数组,或者一个用户名为key/propertyname的对象,那么您可以构建一个更具动态性的用户数据库

您可以以序列化的方式将整个对象保存并从localStorage加载到localStorage

请注意,尽管这是一个有趣的练习,但本地存储并不是一个安全的地方,存储密码(纯文本或加密)也不是一个好的做法

无论如何,它可能看起来像这样:

var
userDatabase=null;
函数loadUserDatabase(){
//仅当用户数据库尚未加载时才加载它。这样,各种功能可以
//始终调用此函数“确保”。
if(userDatabase==null)
userDatabase=JSON.parse(localStorage.getItem(“userDatabase”);
}
函数saveUserDatabase(){
//将整个数据库保存回本地存储。
setItem(“userDatabase”,JSON.stringify(userDatabase));
}
函数名(用户名){
//通过将不同的书写风格转换为
//基本形式。
//在这种情况下,修剪并转换为小写,以有效地使用户
//名称不区分大小写,但仍使用键/属性。
返回username.trim().toLowerCase();
}
函数findUser(用户名){
//检查是否加载了用户数据库
loadUserDatabase();
//按用户名查找用户。
用户名=用户名(username);
if(userDatabase.hasOwnProperty(用户名)){
返回userDatabase[username];
}
返回false;
}
函数isValidUsername(用户名){
//在这里实施您想要(或需要)施加的任何限制。
//长度检查,例如
登记
登记

array.indexOf(newValue)>-1
indexOf
将返回
-1
,用于未找到的元素或已找到元素的索引值使用
jQuery.inArray(username1,username2);
用于检查jqueryy您提到了“array”,但不要使用它们。如果您这样做,例如
用户=[{用户名:“bob”,密码:“secret”},{username:“lea”,password:“alder@@n”}]
将为您提供一个包含用户名、密码和其他属性的用户对象数组。或者在用户名是属性的情况下创建一个users对象:
users={bob:{password=“secret”},lea:{…}
。您可以使用
users.hasOwnProperty
检查用户是否存在,或者使用
users['bob']={password:“secr3t”};
添加/覆盖用户。只需将用户序列化为Json并存储在单个LocalStorage值中,该值就是您的“用户数据库”。
function register() {
if(usernameAlpha.indexOf(document.getElementById("register-username").value) > -1) {alert("Username taken")
    } else if (username1 == null && password1 == null && document.getElementById("register-username").value != "" && document.getElementById("register-password").value != "") {
    localStorage.removeItem("username1");
    localStorage.setItem("username1", document.getElementById("register-username").value);
    localStorage.removeItem("password1");
    localStorage.setItem("password1", document.getElementById("register-password").value);
    alert("Hi, " + document.getElementById("register-username").value + " is now registered.");
    location.reload();

    } else if (username2 == null && password2 == null && document.getElementById("register-username").value != "" && document.getElementById("register-password").value != "") {
    localStorage.removeItem("username2");
    localStorage.setItem("username2", document.getElementById("register-username").value);
    localStorage.removeItem("password2");
    localStorage.setItem("password2", document.getElementById("register-password").value);
    alert("Hi, " + document.getElementById("register-username").value + " is now registered.");
    location.reload();
    }
}