17

我在创建正则表达式以匹配 URL slug 时遇到问题(基本上,字母数字“单词”由单个破折号分隔)

this-is-an-example

我想出了这个正则表达式:/[a-z0-9\-]+$/虽然它将字符串限制为只有字母数字字符和破折号,但它仍然会产生一些误报,如下所示:

-example
example-
this-----is---an--example
-

我对正则表达式很不好,所以任何帮助都将不胜感激。

4

2 回答 2

66

你可以使用这个:

/^
  [a-z0-9]+   # One or more repetition of given characters
  (?:         # A non-capture group.
    -           # A hyphen
    [a-z0-9]+   # One or more repetition of given characters
  )*          # Zero or more repetition of previous group
 $/ 

这将匹配:

  1. 开头的字母数字字符序列。
  2. 然后它将匹配一个连字符,然后是一个字母数字字符序列,0 次或更多次。
于 2013-10-08T19:14:55.050 回答
0

一个更全面的正则表达式将匹配 slug 中的 ascii 和非 ascii 字符,

/^             # start of string
 [^\s!?\/.*#|] # exclude spaces/tabs/line feed.. as well as reserved characters !?/.*#
 +             # match one or more times
$/             # end of string

为了更好地衡量,我们排除了保留的 URL 字符

所以例如,上面将匹配

une-ecole_123-soleil
une-école_123-soleil
une-%C3%A9cole-123_soleil
于 2021-10-27T11:02:13.470 回答