JOI如何允许空格和标点符号

时间:2019-03-18 13:23:43

标签: javascript node.js regex vue.js joi

我想允许Joi在表单的标题字段中允许使用空格/空格。

  

明天与裘德一起工作。

应被允许

  

Morningwalk

目前,只有最后一个被验证为true。这是我的joi验证:

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 个答案:

答案 0 :(得分:1)

.alphanum()使您的检查忽略空白。同样,当您使用构造函数符号定义正则表达式时,将使用字符串文字,其中反斜杠用于形成字符串转义序列,因此需要加倍以形成正则表达式转义序列。但是,使用正则表达式文字表示法更为方便。而不是写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个或更多字符
  • $-字符串的结尾。