提问者:小点点

正则表达式只允许字母数字之间的特殊


我需要一个REGEX,它应该仅在字符串以字母或数字开头和结尾时进行验证,并且应该允许它们之间的特殊字符如下所示:

/*
hello  -> pass
what -> pass
how @@are you -> pass
how are you? -> pass
hi5kjjv  -> pass
8ask -> pass
yyyy. -> fail
! dff -> fail
NoSpeci@@@alcharacters -> pass
Q54445566.00 -> pass
q!Q1 -> pass
!Q1 -> fail
q!! -> fail
#NO -> fail
0.2Version -> pass
-0.2Version -> fail
*/

rex适用于上述查询,但问题是它需要至少两个有效字符:

^[A-Za-z0-9]+[ A-Za-z0-9_@./#&+$%_=;?\'\,\!-]*[A-Za-z0-9]+ 

如果我们通过,则失败:

a -> failed but valid
1 -> failed but valid

我尝试用*替换,但这是从一开始就接受特殊字符(@john),这是错误的。

[A-Za-z0-9]+  with [A-Za-z0-9]* 

共1个答案

匿名用户

您可以使用此正则表达式:

^[A-Za-z0-9](?:[! #$%;&'+,./=?@\w-]*[A-Za-z0-9?])?$

或者,如果您的正则表达式风格支持原子组,则使用更高效的方式:

^[A-Za-z0-9](?>[! #$%;&'+,./=?@\w-]*[A-Za-z0-9?])?$

正则表达式演示

正则表达式详细信息:

  • ^:开始
  • [A-Za-z0-9]:匹配字母数字字符
  • (?