假设我有这个:
[a-zA-Z0-9., -&:]+
允许一次或多次使用字母数字字母和一些特殊字符(逗号,点,破折号等)。但是现在,我只允许在还有字母数字字母时允许使用这些特殊字符:
a-b, c
:好
.a:
:好
,-.
:不好
,
:不好
我尝试了一些方法,但仍然找不到解决方法。我该怎么办?
答案 0 :(得分:2)
如果要确保其中至少有一个字母数字字符,可以使用:
git remote add origin1 git@github.com:ppreyer/first_app.git
这基本上是您当前模式的零个或多个(稍作修改的(a)),后跟一个字母数字,然后又是您当前模式的零个或多个。除非字符串包含一个或多个字母数字,否则不能保证匹配。
如果使用允许部分匹配的regex函数,则您可能还需要考虑将[a-zA-Z0-9., &:-]*[a-zA-Z0-9][a-zA-Z0-9., &:-]*
和^
标记放在模式的末尾。没有这个,您就可以匹配$
之类的东西。如果您使用的是“完全匹配”功能,则不必 。
(a)根据另一个答案中的注释,修改是将<some-invalid-character>A
移动到正则表达式的末尾,以将其视为文字连字符而不是字符范围。
答案 1 :(得分:1)
我会在这里使用一个替代项:
^(?=.*[A-Za-z0-9])[a-zA-Z0-9., &:-]+$
此正则表达式读起来很接近您的要求,并说要匹配:
^ from the start of the string
(?=.*[A-Za-z0-9]) assert that at least one alphanumeric character be present
[a-zA-Z0-9., &:-]+ if so, then match either alphas or certain symbols
$ end of the string
旁注:请注意,在原始角色类中,您在中间的某处放置了破折号:
[a-zA-Z0-9., -&:]+
这实际上在空格字符和&
之间定义了字符的范围;连字符是 not 。您可以在我的正则表达式中看到我将破折号移到了班级的末尾,以确保将其作为文字包含在内。