| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | package mainfunc isNumber(s string) bool {	// Indices of number begin, dot, exp, number end (not included)	begIdx, dotIdx, expIdx, endIdx := -1, -1, -1, -1	// Has significant digit, has exp digit, previous one is digit	sigDigit, expDigit, lDigit := false, true, false	for i := range s {		switch s[i] {		case ' ':			if begIdx != -1 {				endIdx = i			}			lDigit = false		case '+', '-':			if begIdx == -1 {				begIdx = i			} else if i != expIdx+1 { // If not at begin and not after exp				return false			}		case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':			if !lDigit { // Is the first digit				if endIdx != -1 { // Appears after end					return false				}				if begIdx == -1 {					begIdx = i				}				lDigit = true				if expIdx == -1 { // Update sig digit & exp digit					sigDigit = true				} else {					expDigit = true				}			}		case '.':			// If: has two dots || appears after exp || appears after end			if dotIdx != -1 || expIdx != -1 || (!lDigit && endIdx != -1) {				return false			}			if begIdx == -1 {				begIdx = i			}			dotIdx = i		case 'e':			// If: has two exp || no digit at left side || appears after end			if expIdx != -1 || !lDigit || endIdx != -1 {				return false			}			expIdx = i			lDigit = false			expDigit = false // Needs exp digit		default:			return false		}	}	return sigDigit && expDigit}// func main() {// 	println(isNumber("   23 "))// 	println(isNumber("6e-1"))// 	println(isNumber("-53.5e+93"))// 	println(isNumber(". 1"))// 	println(isNumber("0e-"))// 	println(isNumber("e-5"))// 	println(isNumber(""))// 	println(isNumber("1 a"))// 	println(isNumber("--1"))// 	println(isNumber("1. 31"))// 	println(isNumber(".e-4"))// 	println(isNumber("-."))// }
 |