我正在尝试制作一个正则表达式,它允许使用大小写字母 + 数字创建字符串 - a-zA-z0-9以及字符:.-_
我如何制作这样的正则表达式?
以下正则表达式应该是您正在寻找的(下面的解释):
\A[-\w.]*\z
以下字符类应仅匹配您要允许的字符:
[-a-zA-z0-9_.]
您可以将其缩短为以下内容,因为\w
等效于[a-zA-z0-9_]
:
[-\w.]
请注意,要-
在您的字符类中包含文字,它必须是第一个字符,否则它将被解释为一个范围(例如[a-d]
等同于[abcd]
)。另一种选择是用反斜杠转义它。
通常.
表示除换行符以外的任何字符,您需要对其进行转义以匹配文字句点,但这在字符类中不是必需的。
\A
和是字符串开头和结尾的\z
锚点,否则您将匹配包含任何允许字符的字符串,而不是仅包含允许字符的字符串。
*
表示零个或多个字符,如果您希望它需要一个或多个字符,请将其更改为*
a +
。
/\A[\w\-\.]+\z/
\w
表示字母数字(不区分大小写)和“_”\-
表示破折号\.
指时期\A
表示开始(甚至比 更“强” ^
)\z
意味着结束(甚至比“更强” $
)例如:
>> 'a-zA-z0-9._' =~ /\A[\w\-\.]+\z/
=> 0 # this means a match
更新感谢phrogz的改进