我正在尝试制作一个正则表达式,允许使用小字母和大字母+数字创建字符串 - a-zA-z0-9 以及字符:{{1} }
我如何制作这样的正则表达式?
答案 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改进