我正在尝试在 Ruby 中验证二级域名(.com 之前和 https:// 之后的所有内容),以便我可以将其传递到我的 namecheap api 请求中。这是我到目前为止所拥有的,但我不熟悉正则表达式
validates_format_of :sld, with: [a-zA-Z0-9-]
我知道大写字符在域名中不起作用,但我不想让用户再次输入文本。我将小写用户输入并在下一页上显示一条闪存消息。
怎么样
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
标志 - 使匹配不区分大小写注意:这仅适用于长度为 2 或以上的字符串。 如果需要支持单字符输入, 我只想编写一个方法来检查字符串长度,如果它是单个字符,请确保它不是破折号。 如果超过 2 个字符,请使用此正则表达式进行验证。
这可能会起作用:
^[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])
):
^
和 $
是锚点validates :sld, format: { with: /^(?!-)[-\w\d]{,63}(?<!-)$/i }
您可以在 http://rubular.com/
尝试您的正则表达式^(?!-)
- 负向前瞻:不能以破折号开始[-\w\d]
- 匹配单词 \w
、数字 \d
或破折号 -
{,63}
- 匹配项必须介于 1 到 63 个字符之间(?<!-)$
- 负向回顾:不能以破折号结束/i
- 不区分大小写域名只能包含字母 A-Z、数字 0-9 和连字符 (-),以及用于对域进行层次结构分组的一个标点符号 (.),例如在下面 。否或 .com。