Как проверить имя с помощью регулярных выражений? - PullRequest
0 голосов
/ 09 ноября 2019

Я пишу страницу регистрации, и мне нужно спросить у пользователя его имя.

Я хочу, чтобы у него была возможность не использовать заглавные буквы в первой букве, но я не хочу, чтобы заглавные буквы были внутриего имени, и я не хочу также разрешать любые не-буквенные символы.

Ответы [ 2 ]

3 голосов
/ 09 ноября 2019

Я написал эту функцию для вашей цели.

/**
 * This function checks if first name
 * is valid. Keep in mind this is
 * not the proper solution. It will
 * work only for names written in
 * latin letters.
 * @example
 *   isFirstNameValid('Ivan')
 *   will return true.
 *   isFirstNameValid('IvaN')
 *   will return false.
 * @author Georgi Naumov
 * gonaumov@gmail.com for contacts and
 * suggestions
 **/
const isFirstNameValid = (firstName) => 
  /^[a-zA-z][a-z]+$/.test(firstName)

Редактировать: Я реализовал решение с поддержкой Unicode для людей с подобной проблемой в будущем. Он поддерживает латынь, иврит и кириллицу. Если вы хотите поддержать другие культуры, вам нужно предоставить для них регулярные выражения в хеше культур.

const isFirstNameValidWithUnicodeSupport = (firstName, culture = 'LATIN') => {
  const cultures = {
    HEBREW: /^[\u0590-\u05FF]{2,}$/,
    CYRILLIC: /^[\u0410-\u042F\u0430-\u044F][\u0430-\u044F]+$/,
    LATIN: /^[A-Za-z][a-z]+$/,
  };
  return  cultures[culture].test(firstName);
}

This returns true because is valid name in latin
alphabet. 
console.log(isFirstNameValidWithUnicodeSupport('Ivan'));
This returns true because is valid name in cyrillic
alphabet. 
console.log(isFirstNameValidWithUnicodeSupport('Иван', 'CYRILLIC'));
This returns false because is valid name in cyrillic
alphabet but there is a space in the end. 
console.log(isFirstNameValidWithUnicodeSupport('Иван ',  'CYRILLIC'));
This returns true because is valid name in hebrew
alphabet. 
console.log(isFirstNameValidWithUnicodeSupport('אגרת',  'HEBREW'));
This returns false because is valid name in hebrew
but is whole name containing spaces. Not only first name.
console.log(isFirstNameValidWithUnicodeSupport('אגרת בת מחלת',  'HEBREW'));

Edit2: Возможно, лучшим решением будет библиотека xregexp, если вы хотите использовать библиотеку для этой цели. https://github.com/slevithan/xregexp

2 голосов
/ 09 ноября 2019

Вы можете использовать регулярные выражения для сопоставления строковых символов.

let regex = /^[A-Za-z][a-z]+/g;

let name = "Mark";
let match = regex.exec(name);
if(match && match[0].length === name.length){
  console.log(match[0]); // Mark
}
else{
  console.log("Invalid name");
}

name = "mArk";
match = regex.exec(name);
if(match && match[0].length === name.length){
  console.log(match[0]); 
}
else{
  console.log("Invalid name");
}

Чтобы узнать больше о регулярных выражениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...