这是我拥有的正则表达式,我需要确保字符串不以下划线开头或结尾,下划线可能出现在两者之间。
/^[a-zA-Z0-9_.-]+$/
我试过了
(?!_)
但似乎不起作用
允许的字符串:
abcd
abcd_123
不允许的字符串:
abcd_
_abcd_123
这是我拥有的正则表达式,我需要确保字符串不以下划线开头或结尾,下划线可能出现在两者之间。
/^[a-zA-Z0-9_.-]+$/
我试过了
(?!_)
但似乎不起作用
允许的字符串:
abcd
abcd_123
不允许的字符串:
abcd_
_abcd_123
你可以用相反的方式处理这个问题,
检查所有匹配开始和结束下划线的那些,如下所示:
/^_|_$/
^_ #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
不是太难!
/^[^_].*[^_]$/
“除行首的下划线 ( ) 之外的任何字符,然后是^[^_]
任何字符 ( .*
),然后是行尾 ( ) 之前除下划线之外的任何字符[^_]$
。”
这确实需要至少两个字符来验证字符串。如果要允许一个字符行:
/^[^_](.*[^_]|)$/
“除了下划线以外的任何内容开始行,然后是一些字符加上行尾之前的非下划线字符,或者只是一个直接的行尾。
/^[a-zA-Z0-9.-][a-zA-Z0-9_.-]+[a-zA-Z0-9.-]$/
试试这个
说明:
在第一部分,[a-zA-Z0-9.-]
正则表达式只允许大小写字母、数字、点和连字符。
在下一节中[a-zA-Z0-9_.-]+
,正则表达式查找单个或多个字符,这些字符是小写或大写字母、数字点、连字符或下划线。
最后一部分 ,[a-zA-Z0-9.-]
与限制输入以下划线结尾的第一部分相同。