Skip to main content

12. Collected ABNF (汇总的 ABNF)

12. Collected ABNF (汇总的 ABNF)

本节汇总了本文档中使用的所有 ABNF 语法定义。

record           = version terms *SP
version = "v=spf1"

terms = *( 1*SP ( directive / modifier ) )

directive = [ qualifier ] mechanism
qualifier = "+" / "-" / "?" / "~"

mechanism = ( all / include / a / mx / ptr / ip4 / ip6 / exists )

all = "all"
include = "include" ":" domain-spec
a = "a" [ ":" domain-spec ] [ dual-cidr-length ]
mx = "mx" [ ":" domain-spec ] [ dual-cidr-length ]
ptr = "ptr" [ ":" domain-spec ]
ip4 = "ip4" ":" ip4-network [ ip4-cidr-length ]
ip6 = "ip6" ":" ip6-network [ ip6-cidr-length ]
exists = "exists" ":" domain-spec

modifier = redirect / explanation / unknown-modifier
redirect = "redirect" "=" domain-spec
explanation = "exp" "=" domain-spec
unknown-modifier = name "=" macro-string

ip4-cidr-length = "/" ("0" / %x31-39 0*1DIGIT)
; value range 0-32
ip6-cidr-length = "/" ("0" / %x31-39 0*2DIGIT)
; value range 0-128
dual-cidr-length = [ ip4-cidr-length ] [ "/" ip6-cidr-length ]

ip4-network = qnum "." qnum "." qnum "." qnum
qnum = DIGIT
/ %x31-39 DIGIT
/ "1" 2DIGIT
/ "2" %x30-34 DIGIT
/ "25" %x30-35

ip6-network = <as per [RFC5952], Section 4>

domain-spec = macro-string domain-end
domain-end = ( "." toplabel [ "." ] ) / macro-expand

toplabel = ( *alphanum ALPHA *alphanum ) /
( 1*alphanum "-" *( alphanum / "-" ) alphanum )

alphanum = ALPHA / DIGIT

explain-string = *( macro-string / SP )

macro-string = *( macro-expand / macro-literal )
macro-literal = %x21-24 / %x26-7E

macro-expand = ( "%{" macro-letter transformers *delimiter "}" )
/ "%%" / "%_" / "%-"

macro-letter = "s" / "l" / "o" / "d" / "i" / "p" / "h" /
"c" / "r" / "t" / "v"

transformers = *DIGIT [ "r" ]
delimiter = "." / "-" / "+" / "," / "/" / "_" / "="

name = ALPHA *( ALPHA / DIGIT / "-" / "_" / "." )

ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
DIGIT = %x30-39 ; 0-9
SP = %x20 ; space

注意: 本 ABNF 使用 [RFC5234] 中定义的核心规则。