正则表达式匹配字母数字,连字符,下划线和空格字符串

时间:2016-01-21 06:23:30

标签: regex

我正在尝试匹配包含字母数字,连字符,下划线和空格的字符串。

连字符,下划线,空格和数字是可选的,但第一个和最后一个字符必须是字母。

例如,这些都应该匹配:

abc
abc def
abc123
ab_cd
ab-cd

我试过了:

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

但它在开始/结束时与空格,下划线或连字符匹配,但它只允许介于两者之间。

5 个答案:

答案 0 :(得分:5)

使用包含字母字符的简单字符类:

^[a-zA-Z]([\w -]*[a-zA-Z])?$

这匹配以字母开头和结尾的输入,包括一个字母。

你的正则表达式中有一个错误:你的角色中间有一个连字符,这使得它成为一个字符范围。即[9-_]表示" 9_之间的每个字符。

如果你想在字符类中使用文字短划线,请将其放在第一位或最后一位或将其转义。

此外,更喜欢使用\w"字符",这是所有字母和数字,而下划线优先于[a-zA-Z0-9_] - 更容易输入并阅读。

答案 1 :(得分:1)

请在小提琴http://refiddle.com/refiddles/56a07cec75622d3ff7c10000

中查看此内容

这将解决问题

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

答案 2 :(得分:0)

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

^[a-zA-Z0-9]+(?:[\w -]*[a-zA-Z0-9]+)*$

RegEx Demo

这只允许在开始和结束时使用字母数字。

答案 3 :(得分:0)

根据您要求包含空格,连字符,下划线和字母数字字符的要求,您可以使用\w [a-zA-Z0-9_]的速记字符集。使用\-转义连字符,因为它通常用于字符集内的字符范围。

要在开头和结尾否定空格和连字符,我使用了[^\s\-]

完整的正则表达式变为[^\s\-][\w \-]+[^\s\-]

Here是工作演示。

答案 4 :(得分:0)

我尝试使用以下正则表达式:

/^\w+([\s-_]\w+)*$/

这允许字母数字,下划线,空格和破折号。 More details