bounty将在10小时后过期。回答此问题可获得+50声望奖励。Arsene Wenger希望引起更多人对此问题的关注:想学习如何自定义Joi来检查字数小于等于250(包括特殊字符)。这里有一个很大的bug,因为当我把内容粘贴到输入框时,我的前端冻结了。
我想限制文本框内的内容为250个单词,我使用joi验证,它应该计算所有字符(包括特殊字符),并且只允许250个单词,但是我面临着以下问题。
1.第一个特殊字符出现的时刻,即使它是在3个单词之后,我可以得到joi验证错误说“这一节必须包含不超过250个单词”。
1.当我把PDF文件中的内容复制粘贴到其中时,我的屏幕冻结了,所以我认为我的joi模式出了问题。
description1: Joi.string().regex(/^(([\w\s,."'()-]+)\b[\s,.]*){0,250}$/).options({ language: { string: { regex: { base: 'This section must contain no more than 250 words' } } } }).label("this section"),
有人能帮帮我吗?
1条答案
按热度按时间dddzy1tm1#
这可能行得通:
与
\w
不同的是,在只匹配[a-zA-Z0-9_]
的原始正则表达式中,特殊标记\S
匹配任何非空白字符。由于字符集\S
和\s
完全不同,因此这应该避免任何灾难性回溯问题。解释:
\s*
开头有0个或更多空格。这些空格根本不计算在内。(\S+\s+)
一个单词,由1个或多个非空白字符后跟1个或多个空白字符组成。{0,249}
最多重复249次\S*
可选地在末尾增加一个单词,不应该以空格结尾。这是第250个单词,这就是为什么上面的行需要是249而不是250。这只能回溯到最后一个单词的长度,所以如果最后一个单词非常非常长的话会很慢。但是,增长不能是指数级的,所以不应该崩溃joi。