0

这是我拥有的正则表达式,我需要确保字符串不以下划线开头或结尾,下划线可能出现在两者之间。

/^[a-zA-Z0-9_.-]+$/

我试过了

(?!_)

但似乎不起作用

允许的字符串:

abcd
abcd_123

不允许的字符串:

abcd_
_abcd_123
4

3 回答 3

1

你可以用相反的方式处理这个问题,

检查所有匹配开始和结束下划线的那些,如下所示:

/^_|_$/

^_         #starts with underscore
|          #OR
_$         #ends with underscore

然后消除那些匹配的。上面的正则表达式更容易阅读。

检查:http ://www.rubular.com/r/H3Axvol13b

或者您可以尝试更长的正则表达式:

/^[a-zA-Z0-9.-][a-zA-Z0-9_.-]*[a-zA-Z0-9.-]$|^[a-zA-Z0-9.-]+$|^[a-zA-Z0-9.-][a-zA-Z0-9.-]$/

^[a-zA-Z0-9.-]     #starts with a-z, or A-Z, or 0-9, or . -
[a-zA-Z0-9_.-]*    #anything that can occur and the underscore
[a-zA-Z0-9.-]$     #ends with a-z, or A-Z, or 0-9, or . -
|                  #OR
^[a-zA-Z0-9.-]$    #for one-letter words
|                  #OR
^[a-zA-Z0-9.-][a-zA-Z0-9.-]$      #for two letter words

检查: http ://www.rubular.com/r/FdtCqW6haG

于 2013-03-19T06:59:24.493 回答
1

不是太难!

/^[^_].*[^_]$/

“除行首的下划线 ( ) 之外的任何字符,然后是^[^_]任何字符 ( .*),然后是行尾 ( ) 之前除下划线之外的任何字符[^_]$。”

这确实需要至少两个字符来验证字符串。如果要允许一个字符行:

/^[^_](.*[^_]|)$/

“除了下划线以外的任何内容开始行,然后是一些字符加上行尾之前的非下划线字符,或者只是一个直接的行尾。

于 2013-03-19T07:35:02.507 回答
0
/^[a-zA-Z0-9.-][a-zA-Z0-9_.-]+[a-zA-Z0-9.-]$/

试试这个

说明:
在第一部分,[a-zA-Z0-9.-]正则表达式只允许大小写字母、数字、点和连字符。
在下一节中[a-zA-Z0-9_.-]+,正则表达式查找单个或多个字符,这些字符是小写或大写字母、数字点、连字符或下划线。
最后一部分 ,[a-zA-Z0-9.-]与限制输入以下划线结尾的第一部分相同。

于 2013-03-19T06:58:20.523 回答