ОИ, как разрешить пустые места и знаки препинания - PullRequest
1 голос
/ 18 марта 2019

Я хочу разрешить Джои разрешить пробелы / пробелы в поле заголовка формы.

Работать завтра с Джудом.

должно быть разрешено, а также

Утренняя прогулка

В этоммомент только последний подтвержден как истинный.Вот мое подтверждение Джои:

const schema = Joi.object().keys({
  title: Joi.string().alphanum().required().max(50),

Я добавил Regex , но без результата.

title: Joi.string().alphanum().required().max(50), regex(
  new RegExp('^\w+( +\w+)*$'))

Что такое правильный путь?

1 Ответ

1 голос
/ 18 марта 2019

.alphanum() заставляет вашу проверку игнорировать пробелы. Кроме того, когда вы определяете регулярное выражение с помощью нотации конструктора, вы используете строковый литерал, в котором обратные косые черты используются для формирования escape-последовательностей строк и, таким образом, необходимо удвоение для формирования escape-последовательностей регулярных выражений. Однако буквенное обозначение регулярных выражений более удобно. Вместо написания new RegExp('\\d') вы бы написали /\d/.

Итак, вы можете использовать это, чтобы разрешить только пробелы:

title: Joi.string().required().max(50), regex(/^\w+(?:\s+\w+)*$/)

Однако вы, похоже, не хотите использовать запятые и разрешать все другие знаки пунктуации.

Используйте

title: Joi.string().required().max(50), regex(/^\s*\w+(?:[^\w,]+\w+)*[^,\w]*$/)

Детали

  • ^ - начало строки
  • \s* - 0 или более пробелов (или используйте [^,\w]*, чтобы сопоставить 0 или более символов, отличных от запятой и слова)
  • \w+ - 1 или более символов слова (буквы, цифры или _, если вы не хотите _, замените на [^\W_])
  • (?:[^\w,]+\w+)* - ноль или более повторений
    • [^\w,]+ - 1 или более символов кроме запятой и слова
    • \w+ - 1 или более символов слова
  • [^,\w]* - 0 или более символов, отличных от запятой и слова
  • $ - конец строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...