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

前端 未结 3 1139
太阳男子
太阳男子 2021-01-22 10:12

I need an expression that will only accept:

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

Spaces are not allowed either.<

3条回答
  •  余生分开走
    2021-01-22 10:42

    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
    

提交回复
热议问题