【问题标题】:Joi validation regex for a specific value or a list of specific values特定值或特定值列表的 Joi 验证正则表达式
【发布时间】:2020-05-13 12:28:30
【问题描述】:

我正在将 CSV 转换为 JSON,我需要验证一个单元格值。 有一个可能的有效值列表['abc', 'def', 'ref', 'rop']。我想写一个正则表达式,假设一个有效的单元格是

  1. 上面列表中的一个值(例如validValue='abc'notValidValue='adr') 或
  2. 以上列表中的多个值以\\\ 分隔(例如validValue='abc \\\ ref \\\ def' notValidValue='aef \\\ kop'

我尝试使用 Joi.string().regex(/(?:abc|def|ref|rop)(/s\\\\\\/s(?:abc|def|ref|rop))?/),但它会为第一个 /s -> 无效字符和 Argument of type RegExp is not assignable to parameter of type 'string | StringRegexOptions'.... 抛出错误

【问题讨论】:

    标签: javascript regex typescript joi


    【解决方案1】:

    你有错字。 /s 应该是 \s。 而尾部 ? 将匹配第二部分 0 或一次。将其更改为* 可以匹配任意多次。或者你想指定最大的{0,3}

    regex(/(?:abc|def|ref|rop)(\s\\\\\\\s(?:abc|def|ref|rop))*/)
    

    【讨论】:

    • 好的错字是一个错误。但是这个正则表达式仍然不能正常工作。它与单词不完全匹配,因此需要添加锚点: /(?:^abc$|^def$|^ref$|^rop$)(\s\\\\\\\s(?:^ abc$|^def$|^ref$|^rop$))?/.但是现在它将 abc \\\ def 的值转换为错误的值
    • 你能给我一些示例数据和预期结果吗?
    • 在你的关键字后面加^$不正确,应该是/^(?:abc|def|ref|rop)(\s\\\\\\\s(?:abc|def|ref|rop))?$/
    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多