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

1

У меня есть условие строки в js, где я должен проверить, содержит ли имя, введенное в текстовое поле, только одно пространство.

 pattern: name.status === 'full_name' ? /^[a-zA-Z.+-.']+\s+[a-zA-Z.+-. ']+$/ : /^[a-zA-Z.+-. ']+$/

Но указанное выше регулярное выражение также совпадает с именами, заканчивающимися на 2 пробела.

Мне нужно сопоставить его так, чтобы введенное имя принимало только одно пространство для строки имени. Таким образом, имя будет иметь только одно пространство между ними или в конце.

Теги:

3 ответа

0

вы также можете использовать границы слов...

function isFullName(s) {
  
  return /^\b\w+\b \b\w+\b$/.test(s);
}



['Giuseppe', 'Mandato', 'Giuseppe Mandato']
  .forEach(item => console.log('isFullName ${item} ? ${isFullName(item)}'))
0

Два замечания: 1) \s+ в вашем шаблоне соответствует 1 или более пробелов, и 2) [+-.] Матчи 4 символов: +, ,, - и . , поэтому лучше всего положить дефис в конце класса символов.

Вы можете использовать

/^[a-zA-Z.+'-]+(?:\s[a-zA-Z.+'-]+)*\s?$/

См. Демо-версию regex

подробности

  • ^ - начало строки
  • [a-zA-Z.+'-]+ - 1 или более букв . , +, ' или -
  • (?:\s[a-zA-Z.+'-]+)* - нулевая или более последовательность:
    • \s - одиночный пробел
    • [a-zA-Z.+'-]+ - 1 или более букв . , +, ' или - символы
  • \s? - необязательный пробел
  • $ - конец строки.

Примечание: если "имена" не могут содержать . и +, просто удалите эти символы из ваших классов символов.

  • 0
    Это не пройдет, если я дам полное имя, заканчивающееся одним пробелом. Нужно принять имя, которое принимает только один пробел в середине или конце. Также не совпадают имена с 2 строками.
  • 0
    @rubyist Итак, может быть 2 пробела?
Показать ещё 6 комментариев
0
/^\S+\s\S+$/

попробуй это

Некоторые объяснения:

  • ^ - начало строки
  • \s - одиночные пробелы
  • \S - все, кроме пробелов
  • "+" - квантификатор "один или несколько"
  • $ - конец строки
  • 0
    \s равно [\r\n\t\f\v ] , оно также line return ...
  • 0
    Если в этих значениях нет \n , это не проблема (но да, сопоставление разрывов строк); поэтому используйте что-то вроде /^[^ \t]+[ \t][^ \t]+$/ например

Ещё вопросы

Сообщество Overcoder
Наверх
Меню