Убедитесь, что введенное значение имени содержит имя и фамилию с пробелом между ними. Я использую следующее регулярное выражение, но сталкиваюсь с проблемой, когда есть конечный пробел, он возвращает false. Как мне игнорировать конечный пробел в моем регулярном выражении?

var nameArr = value.match(/^([^ ]{1,50})[, ]+(.{0,49}[^ ,])$/);

Мой подход к разрешению конечного пробела var nameArr = value.trim (). Match (/ ^ ([^] {1,50}) [,] + (. {0,49} [^,]) $ /); Есть ли другой способ, кроме использования метода обрезки?

1
user21 25 Сен 2018 в 02:35

2 ответа

Лучший ответ

Вы можете использовать \s*, чтобы сопоставить ноль или более пробелов. Используйте это в конце и в начале вашего регулярного выражения, чтобы разрешить начальные и конечные пробелы:

var nameArr = value.match(/^\s*([^ ]{1,50})[, ]+(.{0,49}[^ ,])\s*$/);
2
Danilo Souza Morães 24 Сен 2018 в 23:48

Чтобы получить обрезанное соответствие для "firstName lastName" или "firstName, lastName" в сопоставленном объекте, используйте следующее:

var nameArr=value.match(/(?=\s*)(\w{1,50})[, ](\w{1,50})(?=\s*)/);

Вы использовали [,] + в своем регулярном выражении, если вы стремились сопоставить "первый, последний" случай (наличие обоих ',' и ''), используйте это:

var nameArr=value.match(/(?=\s*)\w{1,50}(,\s|[,\s])\w{1,50}(?=\s*)/);

(? = шаблон) называются опережающими, они ищут указанный шаблон, не сопоставляя их, т.е. шаблон должен быть там, чтобы пройти тест, но он не будет отображаться в согласованном объекте. Таким образом, мы получаем обрезанное имя.

1
Yugandhar 25 Сен 2018 в 01:49