```ts
export function splitFieldPath(path: string): (string | number)[] {
  if (typeof path !== 'string') {
    throw new Error('Input must be a string');
  }
  if (!path || /^\s*|\s*$/.test(path)) {
    throw new Error('Path cannot be empty or contain leading/trailing whitespace');
  }
  if (/^\.\s*|\s*\.$/.test(path) || /\[\]\s*/.test(path) || /\[.*\]/.test(path)) {
    throw new Error('Invalid path format');
  }

  const parts: (string | number)[] = [];
  const regex = /([a-zA-Z_][a-zA-Z0-9_]*)|\[(\d+)\]/g;
  let match;

  while ((match = regex.exec(path)) !== null) {
    if (match[1]) {
      parts.push(match[1]);
    } else if (match[2]) {
      const index = parseInt(match[2], 10);
      if (index < 0 || match[2].length > 1 && match[2].startsWith('0')) {
        throw new Error('Invalid index');
      }
      parts.push(index);
    }
  }

  if (!match || regex.lastIndex !== path.length) {
    throw new Error('Unterminated bracket or invalid character in path');
  }

  return parts;
}
```