允许在正则表达式中使用额外的特殊字符

Allow additional special characters in a regex

我想验证以下 URL 是否为真。

$a = '/foo-bar-tar';
$b = '/foo-&-tar2';
$a = '/foo-bar-tar.';
$a = '/foo-bar.[tar]';
$a = '/foo-bar-tar';

总而言之,这些是我愿意接受的角色,排名不分先后:

/ - & [  ]  ( ) .

当然还有字母和数字:

a-z A-Z 0-9

问题是我可以验证字母、数字和特殊字符,如 /.-,但我在验证 ()[] 时遇到问题 – 我猜是因为它们是正则表达式语言的一部分。

这是我目前的模式:

^(/[a-z-A-z-0-9.]+)$

它匹配字母、数字和 .,但我不知道如何使其适用于 ()[]

尝试对模式进行以下改编:

^\/[a-zA-Z0-9\-&\[\]().]+$

Debuggex Demo(对问题中的所有示例输入字符串进行单元测试)

要点:

  • ^ – 匹配输入字符串的开头
  • \/ – 您期望的/开场
  • [a-zA-Z0-9\-&\[\]().]+ – 一个或多个 (+) 字母数字 (a-zA-Z0-9) 或允许的特殊字符 (\-&\[\]().) -, [,并且 ] 在字符 class 中转义,因为它们在该上下文中具有特殊含义
  • $ – 匹配输入字符串的结尾

此外,我没有保留分组括号(即 ()),因为它们对受 ^$ 约束的模式毫无意义只有一个感兴趣的匹配项(即整个输入字符串)。