只有字母,数字和短划线的正则表达式?

时间:2016-12-15 00:36:45

标签: ruby-on-rails ruby regex validation

我正在尝试验证Ruby中的二级域名(.com之前和https://之后的所有内容),以便我可以将其传递给我的namecheap api请求。这是我到目前为止,但我不熟悉正则表达式

validates_format_of :sld, with: [a-zA-Z0-9-]
  • 不允许空格
  • 不允许特殊字符
  • 但是,允许破折号
  • 无法以破折号开头
  • 不能以短划线结束

我知道大写字符在域名中不起作用,但我不想让用户再次输入文本。我将在下一页下载用户输入并显示flash消息。

3 个答案:

答案 0 :(得分:1)

怎么样

validates_format_of :sld, with: /\A[a-z\d][a-z\d-]*[a-z\d]\z/i

说明:

  • \A - 匹配字符串的开头
  • [a-z\d] - 匹配来自a-z的任何字母或来自0-9 的任何字母
  • [a-z\d-] - 匹配来自a-z的任何字母,数字0-9,或短划线零次或多次
  • [a-z\d] - 匹配来自a-z的任何字母或来自0-9 的任何字母
  • \z - 匹配字符串结尾
  • i flag - make match case-insensitive

注意:这仅适用于长度为2或更多的字符串。如果您需要支持单字符输入,   我只想编写一个检查字符串长度的方法,如果它是单个字符,请确保它不是破折号。如果它超过2个字符,请使用此正则表达式进行验证。

答案 1 :(得分:0)

这可能会奏效:

^[0-9A-Za-z](|[-0-9A-Za-z]{0,61}[0-9A-Za-z])$
  • 您的字符串需要以字母数字([0-9A-Za-z]
  • 开头
  • 然后,有两个选择((|[-0-9A-Za-z]{0,61}[0-9A-Za-z])):

    • 字符串结尾
    • 介于0到61之间的字母数字或破折号字符后跟一个字母数字字符。 (最多63个字符)
  • ^$是锚点

答案 2 :(得分:0)

validates :sld, format: { with: /^(?!-)[-\w\d]{,63}(?<!-)$/i }

您可以在http://rubular.com/

试用您的正则表达式
  • ^(?!-) - 负向前瞻:无法以破折号开头
  • [-\w\d] - 匹配单词\w,数字\d或短划线-
  • {,63} - 匹配必须介于1到63个字符之间
  • (?<!-)$ - 负面的lookbehind:不能以破折号结束
  • /i - 不区分大小写