code: func validateChannelID(channelID string) error {
  	re, _ := regexp.Compile(channelAllowedChars)
  	// Length
  	if len(channelID) <= 0 {
  		return errors.Errorf("channel ID illegal, cannot be empty")
  	}
  	if len(channelID) > maxLength {
  		return errors.Errorf("channel ID illegal, cannot be longer than %d", maxLength)
  	}
  
  	// Illegal characters
  	matched := re.FindString(channelID)
  	if len(matched) != len(channelID) {
  		return errors.Errorf("channel ID '%s' contains illegal characters", channelID)
  	}
  
  	return nil
  }
docs: // validateChannelID makes sure that proposed channel IDs comply with the
  // following restrictions:
  //      1. Contain only lower case ASCII alphanumerics, dots '.', and dashes '-'
  //      2. Are shorter than 250 characters.
  //      3. Start with a letter
  //
  // This is the intersection of the Kafka restrictions and CouchDB restrictions
  // with the following exception: '.' is converted to '_' in the CouchDB naming
  // This is to accomodate existing channel names with '.', especially in the
  // behave tests which rely on the dot notation for their sluggification.