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

JOI how to allow empty spaces and punctuation

我想让 Joi 在表单的标题字段中允许 spaces/whitespaces。

Working tomorrow with Jude.

应该被允许以及

Morningwalk

目前只有最后一个验证为真。这是我的 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+)*$'))

正确的方法是什么?

.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 个或更多字符
  • $ - 字符串结尾。