正则表达式在 Adonis Js 中不能正常工作

Regular Expression does not work properly in Adonis Js

I have tried several regex found on SO and as google resulted.

我正在尝试使用 regex 作为 adonis js 中的验证规则作为

first_name: 'required|regex:[a-zA-z]+([\s][a-zA-Z]+)*$'

我的目标就是实现这个目标; regex 只接受单词之间的单个 space,

John Doe - True //(single space between words and no space before and after)
 John Doe - True //(single space between and one space before)
John doe  - true //(single space between and one space after)
jhon  doe - false //(two spaces between words. )
John3 Doe  -  false
3John Doe  - False

I have tried several regex which works on online regex checkers but does not responds properly in adonis

这里有一个https://regex101.com/r/pN8xL5/312

我不认识 Adonis,但看起来它试图匹配 整个 字符串。

使用 regex101 网站,我想出了以下正则表达式,gm 选项:

^ *([a-zA-Z]+) ([a-zA-Z]+) *$

它匹配:

  • ^ - 行首,
  • * - space 的初始序列(如果有),
  • ([a-zA-Z]+) - 非空字母序列(第一个捕获组),
  • </code> - 一个space</li> <li><code>([a-zA-Z]+) - 另一个非空字母序列(第二个捕获组),
  • * - space 的尾随序列(如果有)。
  • $ - 行尾。

regex101 中,它匹配您样本中的前 3 个输入行,就像您想要的那样。

正如我所想,您的正则表达式应该只检查一个 单个 字符串, 所以在正则表达式的最终版本中:

  • 删除前导 ^ 和尾随 $,
  • 删除正则表达式选项,

所以您在 Adonis 中使用的正则表达式应该是:

 *([a-zA-Z]+) ([a-zA-Z]+) *

请看这个回答:forum.adonisjs.com/t/rule-not-accepting-regex/

您需要使用 rule() 作为正则表达式。像 :

const { validate, rule } = use("Validator");

const rules = {
      first_name: [
        rule(
          "required"
        ),
        rule(
          "regex",
          [a-zA-z]+([\s][a-zA-Z]+)*$
        ),
        ...
      ]
    };