我想对以下网址进行验证。
$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.]+)$
它匹配字母,数字和.
,但我不知道如何使其适用于()[]
。
答案 0 :(得分:1)
尝试以下改编的模式:
^\/[a-zA-Z0-9\-&\[\]().]+$
Debuggex Demo(对问题中所有样本输入字符串进行单元测试)
关键点:
^
- 匹配输入字符串的开头\/
- 您期望的开场/
[a-zA-Z0-9\-&\[\]().]+
- 一个或多个(+
)字母数字(a-zA-Z0-9
)或允许的特殊字符(\-&\[\]().
)与-
,[
,]
由于在该上下文中的特殊含义而在角色类中进行了转义$
- 匹配输入字符串的结尾此外,我没有保留分组表(即(
和)
),因为它们对^
和$
约束的模式没有意义感兴趣的匹配(即整个输入字符串)。