【发布时间】:2011-03-14 13:22:25
【问题描述】:
我需要一个只接受的表达式:
- 数字
- 普通字母(无特殊字符)
- -
也不允许有空格。
示例:
正则表达式应匹配:this-is-quite-alright
不应该匹配this -is/not,soålright
【问题讨论】:
标签: regex validation url slug
我需要一个只接受的表达式:
也不允许有空格。
示例:
正则表达式应匹配:this-is-quite-alright
不应该匹配this -is/not,soålright
【问题讨论】:
标签: regex validation url slug
你可以使用:
^[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 定义范围- 作为类中的最后一个字符是文字破折号* 是零次或多次重复规范不清楚,但如果- 仅用于分隔“单词”,即没有双破折号、没有尾随破折号、没有前破折号,那么该模式会更复杂(只是稍微!)
_"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
【讨论】:
[A-z0-9-]+
但是您的问题令人困惑,因为它要求输入字母和数字,并且有一个包含破折号的示例。
【讨论】:
A-Z
A-z 是合法的,但包含 6 个额外的非字母字符。
这是一个社区 wiki,试图编译有关“URL/SEO slugging”主题的相关问题的链接。社区受邀贡献。
-this--is---a-test-- 变为 this-is-a-test
spam123-spam-eggs-eggs1拒绝eggs1-,-spam123,spam--spam
【讨论】: