How to write regular expression to match only numbers, letters and dashes?

梦想的初衷 提交于 2020-01-11 10:46:07

问题


I need an expression that will only accept:

  • numbers
  • normal letters (no special characters)
  • -

Spaces are not allowed either.

Example: The regular expression should match:
this-is-quite-alright

It should not match
this -is/not,soålright


回答1:


You can use:

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

This matches strings, possibly empty, that is wholly composed of uppercase/lowercase letters (ASCII A-Z), digits (ASCII 0-9), and a dash.

This matches (as seen on rubular.com):

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

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

And rejects:

this -is/not,soålright
hello world

Explanation:

  • ^ and $ are beginning and end of string anchors respectively
    • If you're looking for matches within a string, then you don't need the anchors
  • [...] is a character class
    • a-z, A-Z, 0-9 in a character class define ranges
    • - as a last character in a class is a literal dash
  • * is zero-or-more repetition

regular-expressions.info

  • Anchors, Character Class, Repetition

Variation

The specification was not clear, but if - is only to be used to separate "words", i.e. no double dash, no trailing dash, no preceding dash, then the pattern is more complex (only slightly!)

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

This matches strings that is at least one "word", where words consists of one or more "alpha", where "alpha" consists of letters and numbers. More "words" can follow, and they're always separated by a dash.

This matches (as seen on rubular.com):

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

And rejects:

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



回答2:


[A-z0-9-]+

But your question is confusing as it asks for letters and numbers and has an example containing a dash.




回答3:


This is a community wiki, an attempt to compile links to related questions about this "URL/SEO slugging" topic. Community is invited to contribute.

Related questions

  • 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-- becomes this-is-a-test
  • Regex for [a-zA-Z0-9-] with dashes allowed in between but not at the start or end
    • allow spam123-spam-eggs-eggs1 reject eggs1-, -spam123, spam--spam
  • Translate “Lorem 3 ipsum dolor sit amet” into SEO friendly “Lorem-3-ipsum-dolor-sit-amet” in Java?

Related tags

  • [slug]


来源:https://stackoverflow.com/questions/3224419/how-to-write-regular-expression-to-match-only-numbers-letters-and-dashes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!