允许在正则表达式中使用额外的特殊字符
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 中转义,因为它们在该上下文中具有特殊含义
$
– 匹配输入字符串的结尾
此外,我没有保留分组括号(即 (
和 )
),因为它们对受 ^
和 $
约束的模式毫无意义只有一个感兴趣的匹配项(即整个输入字符串)。
我想验证以下 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 中转义,因为它们在该上下文中具有特殊含义$
– 匹配输入字符串的结尾
此外,我没有保留分组括号(即 (
和 )
),因为它们对受 ^
和 $
约束的模式毫无意义只有一个感兴趣的匹配项(即整个输入字符串)。