下划线以及正则表达式

时间:2012-05-31 17:22:24

标签: regex

我需要带连字符(-)和下划线(_)的字母数字字符串。但-_不能一个人来。必须有-_的一些aplha或字母数字文字。

abc- allowed
abc_abc-xyz allowed
abc896 allowed
89abc allowed
abc_ not allowed
abc- not allowed
- not allowed
_not allowed
-- not allowed
________ --- not allowed

这样:

^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$

表达式执行上述所有操作,但使用-我也想添加_下划线。 -_不能在开头或结尾出现。

5 个答案:

答案 0 :(得分:1)

以下是我写这个的方法:

^(?![-_])[-a-zA-Z0-9_]+(?<![-_])$

这是一个rubular:http://www.rubular.com/r/7biWZhiiVn

^[-a-zA-Z0-9_]+$将是一个仅包含所需字符的字符串。前瞻和后瞻确保字符串不会以-_开头或结尾。

您可以将[-a-zA-Z0-9_]更改为[-\w],因为\w通常等同于[a-zA-Z0-9_],但Unicode选项可以更改含义以包含其他语言的字母。

答案 1 :(得分:0)

你非常接近它:

^[0-9a-zA-Z]([-_]*[0-9a-zA-Z]+)*$

更好的可能是:

^[0-9a-zA-Z]([-_]+[0-9a-zA-Z]|[0-9a-zA-Z]+)*$

答案 2 :(得分:0)

您可以尝试以下代码:

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

答案 3 :(得分:0)

我将其重写为:

^[a-zA-Z0-9]+([-_]*[a-zA-Z0-9]+)*$

答案 4 :(得分:0)

这将允许单个-和/或_按任意顺序显示,但不能同时显示。也允许直字母数字:

^[a-zA-Z0-9]+[-_]{0,1}[^-_]+[-_]{0,1}[^-_]+$

这种替代方案似乎也有效:

^[^-_]+[-_]{0,1}[^-_]+[-_]{0,1}[^-_]+$