Regex用于在开始和结束处验证字符,但也可以在中间多次出现



我需要防止字符/出现在java字符串的开始和结束,以及//只允许字母数字的任何地方。,()?' +/

我有这个^[^/]?([w-?:().,'+]/?)*[^/]$

的主要问题是它允许在开始处使用无效的字符#和##。

也尝试了这个^[^/]?([^W_-?:().,'+]/?)*[^/]$来删除由w

引起的_下划线问题

所以这些是无效的

/
A//A
A/
#
##

但是这些都是有效的

A/A
A/A.,()+A
^(?!/)([w-?:().,'+]/?)*(?<!/)$

您可以在这里使用lookarounds而不是0 width assertions。参见演示。

https://regex101.com/r/vV1wW6/41

尽量做到简单。不需要否定的字符类([^X] -"除了X之外的任何东西")或否定的查找((?<!X), (?!X) -"什么都没有,或者不是X")。你确切地知道哪些字符在字符串中是允许的,所以把它拼出来:

^[A-Za-z0-9?:().,'+-]+(?:/[A-Za-z0-9?:().,'+-]+)*$

您不需要指定斜杠(/)不能出现在前面,只需列出可以出现的字符。当斜杠出现时,确保它后面至少有一个其他允许的字符。锚(^$)确保没有其他东西进入。

你也可以试试这个

^[^/#]?([w-?:().,'+]/?)*[^/#]$

如果您明确希望#不包含在开头或结尾,只需在您的第一个和最后一个字符类中添加[]

参见演示https://regex101.com/r/vV1wW6/43

相关内容

最新更新