如何编写正则表达式只匹配数字,字母和短划线?

Bri*_*rup 2 regex validation url slug

我需要一个只接受的表达式:

  • 数字
  • 普通字母(无特殊字符)
  • -

也不允许有空格.

示例:正则表达式应匹配:
this-is-quite-alright

它应该不匹配
this -is/not,soålright

pol*_*nts 14

您可以使用:

^[A-Za-z0-9-]*$
Run Code Online (Sandbox Code Playgroud)

这匹配字符串,可能是空的,完全由大写/小写字母(ASCII AZ),数字(ASCII 0-9)和破折号组成.

匹配(如rubular.com上所示):

this-is-quite-alright
and-a-1-and-a-2-and-3-4-5

yep---------this-is-also-okay
Run Code Online (Sandbox Code Playgroud)

拒绝:

this -is/not,soålright
hello world
Run Code Online (Sandbox Code Playgroud)

说明:

  • ^$分别是字符串锚点的开头和结尾
    • 如果您正在寻找字符串中的匹配项,那么您不需要锚点
  • [...] 是一个角色类
    • a-z,A-Z,0-9在字符类定义范围
    • - 作为一个类中的最后一个字符是文字​​破折号
  • * 是零或多重复

regular-expressions.info


变异

规范不明确,但如果-仅用于分隔"单词",即没有双短划线,没有尾随短划线,没有前面的短划线,那么模式更复杂(只是轻微!)

  _"alpha"_    separating dash
 /         \  /
^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$
 \__________/| \__________/|\
    "word"   |    "word"   | zero-or-more
             \_____________/
              group together
Run Code Online (Sandbox Code Playgroud)

这匹配至少一个"单词"的字符串,其中单词由一个或多个"alpha"组成,其中"alpha"由字母和数字组成.可以跟随更多"单词",并且它们总是被破折号分开.

匹配(如rubular.com上所示):

this-is-quite-alright
and-a-1-and-a-2-and-3-4-5
Run Code Online (Sandbox Code Playgroud)

拒绝:

--no-way
no-way--
no--way
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

1852 次

最近记录:

14 年,3 月 前