如何编写正则表达式以仅匹配数字、字母和破折号?
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-z
、A-Z
、0-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]
【讨论】:
以上是关于如何编写正则表达式以仅匹配数字、字母和破折号?的主要内容,如果未能解决你的问题,请参考以下文章