我正在尝试验证Ruby中的二级域名(.com之前和https://之后的所有内容),以便我可以将其传递给我的namecheap api请求。这是我到目前为止,但我不熟悉正则表达式
validates_format_of :sld, with: [a-zA-Z0-9-]
我知道大写字符在域名中不起作用,但我不想让用户再次输入文本。我将在下一页下载用户输入并显示flash消息。
答案 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])
):
^
和$
是锚点
答案 2 :(得分:0)
validates :sld, format: { with: /^(?!-)[-\w\d]{,63}(?<!-)$/i }
试用您的正则表达式
^(?!-)
- 负向前瞻:无法以破折号开头[-\w\d]
- 匹配单词\w
,数字\d
或短划线-
{,63}
- 匹配必须介于1到63个字符之间(?<!-)$
- 负面的lookbehind:不能以破折号结束/i
- 不区分大小写