JavaScript RegExp密码验证不起作用

时间:2019-01-17 04:01:20

标签: javascript regex

我尝试使用RegExp验证密码。我写了以下代码,

    var pass = jQuery('#new_password').val(); 
    // Minimum six characters, at least one uppercase letter, one lowercase letter and one number
    var reg = new RegExp("^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{6,}$");
    if (reg.test(pass)) {
        alert(1);
    } else {
        alert(2);
    }

但是,即使我根据自己的要求输入了复杂密码(至少六个字符,至少一个大写字母,一个小写字母和一个数字),Condition的真实部分(如果有条件)也不会执行。

有人可以帮我解决这个问题吗?谢谢。

4 个答案:

答案 0 :(得分:1)

将您的正则表达式更改为:

.$metric

不要忘记library(tidyverse) data %>% group_by(name) %>% tidyr::nest() %>% mutate(result = map(data, function(df) { get_sample_size(metric = df$metric, threshold = 0.01) })) #> # A tibble: 3 x 3 #> name data result #> <fct> <list> <list> #> 1 A <tibble [1 × 1]> <data.frame [1 × 1]> #> 2 B <tibble [1 × 1]> <data.frame [1 × 1]> #> 3 C <tibble [1 × 1]> <data.frame [1 × 1]> 标志。

  • 使用时:import React, { Component } from 'react'; import $ from 'jquery'; import timepicker from 'timepicker' class TimePicker extends Component { componentDidMount(){ this.initDatepicker(); } initDatepicker(){ $(this.refs.timepicker).timepicker(); } handleChange = (e) => { console.log(e.currentTarget.value) } render(){ return ( <div> <input className='timepicker' type='text' ref='timepicker' onBlur={e => this.handleChange(e)} /> </div> ) } } export default TimePicker; 仅在用户键入时会通过 大写或小写字母。

  • 使用时:^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{6,}$ 您需要用户输入一些内容 特殊字符。

g

答案 1 :(得分:1)

尝试类似这样的方法吗? 将每个测试分开,这样更易​​于管理。海事组织。

export function validatePassword(password, repeatPassword) {
  // password tests
  const hasUpperCase = /[A-Z]/.test(password)
  const hasLowerCase = /[a-z]/.test(password)
  const hasNumbers = /\d/.test(password)
  const hasSpecial = /\W/.test(password)
  let errors = []

  if (password !== repeatPassword) {
    errors.push('Passwords do not match.')
  }
  if (password.length < 6) {
    errors.push('Password must be at least 6 characters long.')
  }
  if (!hasUpperCase) {
    errors.push('Password must contain at least one uppercase letter.')
  }
  if (!hasLowerCase) {
    errors.push('Password must have at least one lowercase letter.')
  }
  if (!hasNumbers) {
    errors.push('Password must have at least one number.')
  }
  if (!hasSpecial) {
    errors.push('Password must have at least one special character.')
  }

  return errors
}

export default validatePassword;

我发现分隔每个测试而不是一个正则表达式会更容易。您还可以为用户提供特定的故障。

答案 2 :(得分:1)

您可以尝试一下:

^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)[A-Za-z\d@$!%*#?&]{6,}$

如下所示: https://regex101.com/r/GAkedL/1

说明-

在这里,我们分别匹配每个条件,因为在您的代码中,第一个先行提示表示“后跟 小写或大写字母”。

(?=.*?[a-z])告诉正则表达式密码应该包含0个或更多字符,后跟一个小写字母
(?=.*?[A-Z])告诉正则表达式,密码应包含0个或更多字符,后跟一个大写字母
(?=.*?\d)告诉正则表达式,密码应包含0个或多个字符,后跟一个数字

请注意,在每个前瞻中,在?之后添加了.*。这意味着在找到所需的字母或数字之前,正则表达式应匹配尽可能少的字符,这样效率更高。

答案 3 :(得分:0)

您需要对正则表达式进行一些修改。

要匹配至少6个字符且至少包含1个字母和1个数字,可以使用以下表达式:

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

但是要确保至少一个字母也是大写,您需要添加一个附加条件。以下表达式至少应匹配6个字符,并至少包含1个大写字母,1个小写字母和1个数字:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"