如何编写正则表达式以仅匹配数字、字母和破折号?

Posted

技术标签:

【中文标题】如何编写正则表达式以仅匹配数字、字母和破折号?【英文标题】:How to write regular expression to match only numbers, letters and dashes? 【发布时间】:2011-03-14 13:22:25 【问题描述】:

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

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

也不允许有空格。

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

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

【问题讨论】:

【参考方案1】:

你可以使用:

^[A-Za-z0-9-]*$

这匹配字符串,可能为空,完全由大写/小写字母 (ASCII A-Z)、数字 (ASCII 0-9) 和破折号组成。

这匹配 (as seen on rubular.com):

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

yep---------this-is-also-okay

并拒绝:

this -is/not,soålright
hello world

解释:

^$ 分别是字符串锚的开始和结束 如果您要在字符串中查找匹配项,则不需要锚点 [...] 是一个字符类 字符类中的a-zA-Z0-9 定义范围 - 作为类中的最后一个字符是文字​​破折号 * 是零次或多次重复

正则表达式.info

Anchors, Character Class, Repetition

变化

规范不清楚,但如果- 仅用于分隔“单词”,即没有双破折号、没有尾随破折号、没有前破折号,那么该模式会更复杂(只是稍微!)

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

这匹配至少是一个“单词”的字符串,其中单词由一个或多个“alpha”组成,其中“alpha”由字母和数字组成。后面可以有更多的“词”,它们总是用破折号隔开。

这匹配 (as seen on rubular.com):

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

并拒绝:

--no-way
no-way--
no--way

【讨论】:

感谢您的解释。我选择了这个,它就像一个魅力:) 最后一件事.. 你能不能让它也拒绝? 完美运行 :) 如果有人想知道,它用于验证 URL 的 SEO 优化 slug。像 www.mydomain.com/57/slug.aspx @polygenelubricants:一如既往,非常详细的答案 +1 :) @sAc:就其价值而言,我确信这是一个骗局。回答它比寻找骗子要快。【参考方案2】:
[A-z0-9-]+

但是您的问题令人困惑,因为它要求输入字母和数字,并且有一个包含破折号的示例。

【讨论】:

你缺少大写字母A-Z ***.com/questions/3148240/… -- 参见 A-Z 示例。 A-z 是合法的,但包含 6 个额外的非字母字符。 @polygenelubricans 不知道,如果它也匹配 Z 和 a 之间的 ASCII 字符就有意义了【参考方案3】:

这是一个社区 wiki,试图编译有关“URL/SEO slugging”主题的相关问题的链接。社区受邀贡献。

相关问题

regex/php: how can I convert 2+ dashes to singles and remove all dashes at the beginning and end of a string? -this--is---a-test-- 变为 this-is-a-test Regex for [a-zA-Z0-9-] with dashes allowed in between but not at the start or end 允许spam123-spam-eggs-eggs1拒绝eggs1-,-spam123,spam--spam Translate “Lorem 3 ipsum dolor sit amet” into SEO friendly “Lorem-3-ipsum-dolor-sit-amet” in Java?

相关标签

[slug]

【讨论】:

以上是关于如何编写正则表达式以仅匹配数字、字母和破折号?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配信用卡号,除非它们出现在 UUID 中

正则表达式:\w - UTF-8 中的“_”+“-”

为啥在 PEP 0263 正则表达式中使用 `.`?

正则表达式去除给定字符以外的字符?

不使用正则表达式的字母和数字排列的 SQL 匹配

求JS中如何匹配字母、数字和空格的正则表达式