如何允许字母,数字,句号,连字符和下划线的字符串?

时间:2012-05-16 22:39:12

标签: ruby regex

我正在尝试制作一个正则表达式,允许使用小字母和大字母+数字创建字符串 - a-zA-z0-9 以及字符:{{1} }

我如何制作这样的正则表达式?

2 个答案:

答案 0 :(得分:11)

以下正则表达式应该是您正在寻找的(下面的说明):

\A[-\w.]*\z

以下字符类应仅匹配您要允许的字符:

[-a-zA-z0-9_.]

您可以将此内容缩短为以下内容,因为\w相当于[a-zA-z0-9_]

[-\w.]

请注意,要在字符类中包含文字-,它必须是第一个字符,否则它将被解释为范围(例如[a-d]等同于[abcd] )。另一种选择是用反斜杠来逃避它。

通常.表示除换行之外的任何字符,您需要将其转义为与文字句点匹配,但在字符类中不需要这样做。

\A\z是字符串开头和结尾的锚点,否则您将匹配包含任何允许字符的字符串,而不是仅包含的字符串允许的字符。

*表示零个或多个字符,如果您需要一个或多个字符,请将*更改为+

答案 1 :(得分:4)

/\A[\w\-\.]+\z/

  • \w表示字母数字(不区分大小写)和" _"
  • \-表示破折号
  • \.表示期限
  • \A表示开始(甚至"更强"比^
  • \z表示结束(甚至"更强"比$

例如:

>> 'a-zA-z0-9._' =~ /\A[\w\-\.]+\z/
=> 0 # this means a match

更新感谢phrogz改进