matcher.go
func hasDatePrefix(s string) bool {
	if len(s) < 10 {
		return false
	}
	var count int
	for i, r := range s {
		if count != i {
			return false
		}
		switch i {
		case 4, 7:
			if r != '-' {
				return false
			}
		default:
			if !isDigit(r) {
				return false
			}
		}
		if i == 9 {
			// month
			if s[5] == '1' {
				if s[6] > '2' {
					return false
				}
			} else if s[5] == '0' {
				if s[6] == '0' {
					return false
				}
			} else {
				return false
			}

			// day
			if s[8] == '0' {
				if s[9] == '0' {
					return false
				}
			} else if s[8] == '3' {
				if s[9] > '1' {
					return false
				}
			} else if s[8] != '1' && s[8] != '2' {
				return false
			}

			return true
		}
		count += 1
	}

	return true
}
func hasDatePrefix(s string) bool {
	if len(s) < 10 {
		return false
	}
	var count int
	for i, r := range s {
		if count != i {
			return false
		}
		switch i {
		case 4, 7:
			if r != '-' {
				return false
			}
		default:
			if !isDigit(r) {
				return false
			}
		}
		if i == 9 {
			// month
			if s[5] == '1' {
				if s[6] > '2' {
					return false
				}
			} else if s[5] == '0' {
				if s[6] == '0' {
					return false
				}
			} else {
				return false
			}

			// day
			if s[8] == '0' {
				if s[9] == '0' {
					return false
				}
			} else if s[8] == '3' {
				if s[9] > '1' {
					return false
				}
			} else if s[8] != '1' && s[8] != '2' {
				return false
			}

			return true
		}
		count += 1
	}

	return true
}
// date formant YYYY-MM-DD
// mininum date 0000-01-01
// maximum date 9999-12-31