создать регулярное выражение для проверки имени пользователя - PullRequest
0 голосов
/ 24 апреля 2019

Мне нужна помощь в создании регулярных выражений. Просто я не совсем понимаю, как создать регулярное выражение. Как создать проверку для имени пользователя с некоторыми правилами, подобными этим

  1. разрешены только прописные, строчные буквы, подчеркивание (_) и точка (.)

  2. начать с подчеркивания (_)

Я уже попробовал несколько регулярных выражений с сайта разработчиков Mozilla, но это не так

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

Я ожидаю, что какое-то имя пользователя будет таким же

_username = true

_username1 = false

.username = false

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 голосов
/ 24 апреля 2019

При создании регулярного выражения вы можете помочь себе, используя 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
0 голосов
/ 24 апреля 2019

То, что вы описываете, будет ^_[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}`);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...