import React, { useState, useMemo } from 'react'; import './PlateInput.css'; export default function PlateInput({ modelValue = '', provinces = ['京', '沪', '粤', '津', '冀', '鲁', '苏', '浙', '川', '渝'], onChange }) { const [prov, setProv] = useState(modelValue ? modelValue[0] : '京'); const [body, setBody] = useState(modelValue ? modelValue.slice(1) : ''); const [focused, setFocused] = useState(false); const valid = /^[A-Z][A-Z0-9]{5}$/.test(body) || /^[A-Z][A-Z0-9]{6}$/.test(body); const invalid = !!body && !valid; const isNewEnergy = /^[A-Z][A-Z0-9]{6}$/.test(body); const tipClass = !body ? '' : valid ? 'valid' : 'invalid'; const tipText = !body ? '格式:省份 + 字母 + 5/6 位(新能源 6 位)' : valid ? '车牌号合法:' + prov + body + '' + (isNewEnergy ? '新能源' : '普通') + '' : '车牌格式不正确(首位应为字母)'; const onInput = (e) => { const v = e.target.value.toUpperCase().replace(/[^A-Z0-9]/g, '').slice(0, 7); e.target.value = v; setBody(v); if (onChange) onChange(prov + v); }; return (