正则表达式在 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
我不认识 Adonis,但看起来它试图匹配 整个 字符串。
使用 regex101 网站,我想出了以下正则表达式,g 和
m 选项:
^ *([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]+)*$
),
...
]
};
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
我不认识 Adonis,但看起来它试图匹配 整个 字符串。
使用 regex101 网站,我想出了以下正则表达式,g 和 m 选项:
^ *([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]+)*$
),
...
]
};