Cloudinary Public ID 的正则表达式

Regex for Cloudinary Public ID

我需要 (javascript) 正则表达式来验证 Cloudinary Public ID。规则是:

Public ID 格式支持除以下保留字符外的所有可打印字符:? & # \ % < >。此外,空格和正斜杠 (/) 不能用作 Public ID 的第一个或最后一个字符

试过了,但没用:^[^\s\]+[^?&#\%<>]+$

我参考了这些 SO 问题:Javascript regex - no white space at beginning + allow space in the middle and Regex - Does not contain certain Characters

试试这个正则表达式:

^(?![ \/])(?!.*[ \/]$)(?!.*[?&#\%<>])[ -~]+$

Click for Demo

解释:

  • ^ - 断言字符串的开头
  • (?![ \/]) - 否定先行验证 space 和 / 都不在字符串的开头
  • (?!.*[ \/]$) - 否定先行验证 space 和 / 都不在字符串的末尾
  • (?!.*[?&#\%<>]) - 否定前瞻以确保在字符串 [?&#\%<>]
  • 中找到这些字符中的 none
  • [ -~]+ - 匹配出现次数超过 1 次的可打印 ascii 字符(space 到 ~
  • $ - 断言字符串结束