Как сделать так, чтобы проверка Joi regex() не прошла, если строка содержит (пробел)?

У меня есть регистрационный номер транспортного средства, проверяемый Joi в Node.js, и мне нужно, чтобы он отклонял любую строку, содержащую пробелы (пробел, табуляцию и т. д.).

Я попробовал следующую схему, но Джой ее пропускает:

  const schema = { 
    regNo: Joi.string()
     .regex(/^.*\S*.*$/)
     .required()
     .trim()
    }

Итак, если я отправлю «JOI 777», строка считается действительной.

Что я делаю неправильно? Заранее спасибо,


person Nikolay Chekan    schedule 20.11.2018    source источник
comment
Ваша первая часть вашего регулярного выражения будет соответствовать чему угодно. Я думаю, что то, что вы хотите, намного проще, сопоставьте любое /^\S+$/ без пробелов, IOW: если появится пробел, это должно завершиться ошибкой.   -  person Keith    schedule 20.11.2018


Ответы (2)


Эта часть вашего регулярного выражения -> /^.* говорит, что соответствует чему угодно, поэтому остальная часть вашего регулярного выражения в значительной степени замкнута накоротко.

Итак, ваш RegEx немного проще, /^\S+$/

Это означает, что от начала до конца все должно быть пустым пробелом. Также видно, что это проверяет все на наличие пробелов, вы также можете убрать свой .trim()..

eg.

const tests = [
  "JOI 777",  //space in the middle
  "JOI777",   //looks good to me
  "  JOI777", //space at start
  "JOI777 ",  //space at end
  "JO\tI77",  //tab
  "ABC123",   //another one that seems ok.
  "XYZ\n111"  //newline
];

tests.forEach(t => {
  console.log(`${!!t.match(/^\S+$/)} "${t}"`);
});

person Keith    schedule 20.11.2018

для пропуска пробелов из строки просто используйте:

"hello world".replace(/\s/g, "");

если у вас есть более одного места, используйте это:

"this string has more than one space".replace(/ /g, '');

подробнее см. эту ссылку ниже: Удалить пробелы внутри строки в javascript

person Babak Abadkheir    schedule 20.11.2018
comment
if you have more than One space use this, ваш первый тоже удалит несколько пробелов.. Ваш второй удалит ТОЛЬКО пробелы, а не вкладки/новую строку и т. д. - person Keith; 20.11.2018
comment
Спасибо за советы, которые я понял сейчас - person Babak Abadkheir; 20.11.2018
comment
Это на самом деле не отвечает на вопрос человека. Они хотят, чтобы joi отклоняла значение, а не изменяла входящие значения. - person unflores; 20.11.2018
comment
Привет всем, спасибо за ответы. Да, ответ, предоставленный Китом, работал в Joi по мере необходимости. Очень ценю всеобщее внимание! - person Nikolay Chekan; 21.11.2018
comment
Этот ответ довольно неуместен. Он не хочет удалять пробелы, вместо этого он хочет вызвать ошибку проверки. Это особенно важно для полей пароля. Возможно, Джой должен реализовать метод, запрещающий использование специального символа в строке. - person Capan; 01.04.2021