创建用于用户名验证的正则表达式

时间:2019-04-24 08:14:09

标签: javascript regex

我需要一些帮助来创建正则表达式。只是我不太了解如何创建正则表达式。如何使用类似这样的规则为用户名创建验证

  1. 仅允许使用大写,小写,下划线(_)和点(。)

  2. 以下划线(_)开头

我已经在mozilla开发人员网站上尝试过一些正则表达式,但这似乎不正确

var usernameRegex = new RegExp(/_+[A-Za-z]/);
var usernameRegexFound = usernameRegex.test(username.value);
if (!usernameRegexFound) {
  msg = "Invalid Username";
}

我希望这样的用户名

_username = true

_username1 =假

.username = false

用户名=假

还有什么网站可以让我了解如何创建正则表达式,因为我还有更多事要做

function validuser(username) {
  var msg = "valid";
  var usernameRegex = new RegExp(/_+[A-Za-z]/);
  var usernameRegexFound = usernameRegex.test(username);
  if (!usernameRegexFound) {
    msg = "Invalid Username";
  }
  return msg;
}

console.log(validuser("_username","Valid?"));
console.log(validuser("_username1","Invalid?"));
console.log(validuser(".username","Invalid?"));
console.log(validuser("username","Invalid?"));

2 个答案:

答案 0 :(得分:-1)

您描述的是^_[a-zA-Z._]+$

  • ^表示字符串的开头
  • _实际上就是您的下划线
  • [a-zA-Z._]+的上下,下划线和下划线1次或多次
  • $是字符串的结尾

但是它允许__和_。作为用户名

const regex = /^_[a-zA-Z._]+$/gm;
const str = `_username

_username1

.username

username`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        document.write(`Found match, group ${groupIndex}: ${match}`);
    });
}

答案 1 :(得分:-1)

创建正则表达式时,您可以使用https://regex101.com/帮助自己。

也就是说,这是您的正则表达式:

function test(username) {
  const regex = new RegExp('^_{1}[A-Za-z\.]*$', 'i');

  // Alternative version considering @thomas points
  // const regex = new RegExp('^_[A-Za-z._]+$', 'i');
  
  return regex.test(username);
}

console.log(test('test'));
console.log(test('_test'));
console.log(test('_te.s.t'));
console.log(test('_teST'));
console.log(test('Test_'));
console.log(test('^zdq^dz.'));
console.log(test('_teS/T'));
console.log(test('_9901A'));
enter image description here