我需要带连字符(-
)和下划线(_
)的字母数字字符串。但-
和_
不能一个人来。必须有-
或_
的一些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]+)*$
表达式执行上述所有操作,但使用-
我也想添加_
下划线。 -
和_
不能在开头或结尾出现。
答案 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}[^-_]+$