|
|
@@ -376,21 +376,66 @@ const CustomFormWizard = (props) => { |
|
|
|
} |
|
|
|
|
|
|
|
function handleIdNo(idNo,selectedIdDocType,checkDigit) { |
|
|
|
var pattern = /^[A-Z][0-9]*$/; |
|
|
|
var space = /\s/; |
|
|
|
if (!idNo.match(pattern)) { |
|
|
|
return false; |
|
|
|
}else if |
|
|
|
(selectedIdDocType=="HKID"&&checkDigit==""){ |
|
|
|
return false; |
|
|
|
} |
|
|
|
else if (idNo.match(space)) { |
|
|
|
return false; |
|
|
|
}else if (idNo.length < 7) { |
|
|
|
return false; |
|
|
|
} else { |
|
|
|
// console.log("IdNo true") |
|
|
|
return true; |
|
|
|
// var pattern = /^[A-Z][0-9]*$/; |
|
|
|
var pattern_HKIDv1 = /^[A-Z]{1}[0-9]{6}$/; |
|
|
|
var pattern_HKIDv2 = /^[A-Z]{2}[0-9]{6}$/; |
|
|
|
var pattern_passport = /^[A-Z]{1}[0-9]{8}$/; |
|
|
|
var pattern_CHID = /^[0-9]{6}(20|19)[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[0-9]{3}[0-9X]{1}/; |
|
|
|
var pattern_otherCert = /^[A-Z]{1}[0-9]{5,}/; |
|
|
|
// var space = /\s/; |
|
|
|
// if (!idNo.match(pattern)) { |
|
|
|
// return false; |
|
|
|
// } else if (selectedIdDocType=="HKID"&&checkDigit==""){ |
|
|
|
// return false; |
|
|
|
// } else if (idNo.match(space)) { |
|
|
|
// return false; |
|
|
|
// } else if (idNo.length < 6) { |
|
|
|
// return false; |
|
|
|
// } else { |
|
|
|
// // console.log("IdNo true") |
|
|
|
// return true; |
|
|
|
// } |
|
|
|
switch (selectedIdDocType) { |
|
|
|
case "HKID": |
|
|
|
if (checkDigit === "") return false |
|
|
|
if (idNo.match(pattern_HKIDv1)) { |
|
|
|
return true |
|
|
|
} else if (idNo.match(pattern_HKIDv2)) { |
|
|
|
return true |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
case "passport": |
|
|
|
if (idNo.match(pattern_passport)) { |
|
|
|
return true |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
case "CNID": |
|
|
|
if (idNo.match(pattern_CHID)) { |
|
|
|
const subStr_year = idNo.substring(6, 10) |
|
|
|
const subStr_month = idNo.substring(10, 12) |
|
|
|
const subStr_date = idNo.substring(12, 14) |
|
|
|
|
|
|
|
const today = new Date() |
|
|
|
const inputDate = new Date(`${subStr_year}-${subStr_month}-${subStr_date}`) |
|
|
|
|
|
|
|
if (inputDate > today || inputDate === "Invalid Date" || inputDate.getFullYear().toString() !== subStr_year || (inputDate.getMonth() + 1).toString().padStart(2, "0") !== subStr_month || inputDate.getDate().toString().padStart(2, "0") !== subStr_date) { |
|
|
|
return false |
|
|
|
} else { |
|
|
|
return true |
|
|
|
} |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
case "otherCert": |
|
|
|
if (idNo.match(pattern_otherCert)) { |
|
|
|
return true |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -480,17 +525,57 @@ const CustomFormWizard = (props) => { |
|
|
|
address3: yup.string().max(255).required('請輸入第三行地址'), |
|
|
|
email: yup.string().email('請輸入電郵格式').max(255).required('請輸入電郵'), |
|
|
|
emailConfirm: yup.string().email('請輸入電郵格式').max(255).required('請輸入電郵').oneOf([yup.ref('email'), null], '請輸入相同電郵'), |
|
|
|
idNo: yup.string().required('請輸入證件號碼') |
|
|
|
.matches(/^[aA-zZ0-9\s]+$/, "證件號碼不包含特殊字符") |
|
|
|
.matches(/^\S*$/, '證件號碼不包含空格') |
|
|
|
.test('checkIDCardFormat', '請輸入香港身份證號碼', function(value) { |
|
|
|
idNo: yup.string().required(`請輸入${selectedIdDocInputType}號碼`) |
|
|
|
.matches(/^[aA-zZ0-9\s]+$/, `${selectedIdDocInputType}號碼不包含特殊字符`) |
|
|
|
.matches(/^\S*$/, `${selectedIdDocInputType}號碼不包含空格`) |
|
|
|
.test('checkIDCardFormat', `請輸入有效的${selectedIdDocInputType}號碼`, function(value) { |
|
|
|
const idDocType = selectedIdDocType.type; |
|
|
|
var pattern = /^[A-Z][0-9]*$/; |
|
|
|
var pattern_HKIDv1 = /^[A-Z]{1}[0-9]{6}$/; |
|
|
|
var pattern_HKIDv2 = /^[A-Z]{2}[0-9]{6}$/; |
|
|
|
var pattern_passport = /^[A-Z]{1}[0-9]{8}$/; |
|
|
|
var pattern_CHID = /^[0-9]{6}(20|19)[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])[0-9]{3}[0-9X]{1}/; |
|
|
|
var pattern_otherCert = /^[A-Z]{1}[0-9]{5,}/; |
|
|
|
if(value!==undefined){ |
|
|
|
if (!value.match(pattern)&&idDocType=="HKID"&&value.length<7) { |
|
|
|
return false |
|
|
|
} else { |
|
|
|
return true |
|
|
|
switch (idDocType) { |
|
|
|
case "HKID": |
|
|
|
if (value.match(pattern_HKIDv1)) { |
|
|
|
return true |
|
|
|
} else if (value.match(pattern_HKIDv2)) { |
|
|
|
return true |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
case "passport": |
|
|
|
if (value.match(pattern_passport)) { |
|
|
|
return true |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
case "CNID": |
|
|
|
if (value.match(pattern_CHID)) { |
|
|
|
const subStr_year = value.substring(6, 10) |
|
|
|
const subStr_month = value.substring(10, 12) |
|
|
|
const subStr_date = value.substring(12, 14) |
|
|
|
|
|
|
|
const today = new Date() |
|
|
|
const inputDate = new Date(`${subStr_year}-${subStr_month}-${subStr_date}`) |
|
|
|
|
|
|
|
if (inputDate > today || inputDate === "Invalid Date" || inputDate.getFullYear().toString() !== subStr_year || (inputDate.getMonth() + 1).toString().padStart(2, "0") !== subStr_month || inputDate.getDate().toString().padStart(2, "0") !== subStr_date) { |
|
|
|
return false |
|
|
|
} else { |
|
|
|
return true |
|
|
|
} |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
case "otherCert": |
|
|
|
if (value.match(pattern_otherCert)) { |
|
|
|
return true |
|
|
|
} else { |
|
|
|
return false |
|
|
|
} |
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
}), |
|
|
@@ -754,17 +839,31 @@ const CustomFormWizard = (props) => { |
|
|
|
<OutlinedInput |
|
|
|
id="idNo-login" |
|
|
|
type="text" |
|
|
|
value={formik.values.idNo.toUpperCase().trim()} |
|
|
|
name="idNo" |
|
|
|
onChange={formik.handleChange} |
|
|
|
value={formik.values.idNo} |
|
|
|
onChange={async (e)=>{ |
|
|
|
const ele = document.getElementById('idNo-login') |
|
|
|
const startPos = ele.selectionStart |
|
|
|
if (e.type === "change") { |
|
|
|
if (!(e.target.value.match(/\s/g))) { |
|
|
|
const newValue = await e.target.value.toUpperCase() |
|
|
|
await formik.setFieldValue("idNo", newValue) |
|
|
|
ele.setSelectionRange(startPos, startPos) |
|
|
|
} else { |
|
|
|
await formik.setFieldValue("idNo", formik.values.idNo) |
|
|
|
ele.setSelectionRange(startPos-1, startPos-1) |
|
|
|
} |
|
|
|
} |
|
|
|
}} |
|
|
|
placeholder="證件號碼" |
|
|
|
fullWidth |
|
|
|
sx={{mr:1}} |
|
|
|
error={Boolean(formik.touched.idNo && formik.errors.idNo)} |
|
|
|
onBlur={formik.handleBlur} |
|
|
|
inputProps={{ |
|
|
|
maxLength: selectedIdDocType.type =='HKID'?7:18, |
|
|
|
maxLength: selectedIdDocType.type =='HKID'?8:18, |
|
|
|
onKeyDown: (e) => { |
|
|
|
console.log(e) |
|
|
|
if (e.key === 'Enter') { |
|
|
|
e.preventDefault(); |
|
|
|
} |
|
|
@@ -813,9 +912,22 @@ const CustomFormWizard = (props) => { |
|
|
|
<OutlinedInput |
|
|
|
id="idNo-login" |
|
|
|
type="text" |
|
|
|
value={formik.values.idNo.trim()} |
|
|
|
value={formik.values.idNo} |
|
|
|
name="idNo" |
|
|
|
onChange={formik.handleChange} |
|
|
|
onChange={async (e)=>{ |
|
|
|
const ele = document.getElementById('idNo-login') |
|
|
|
const startPos = ele.selectionStart |
|
|
|
if (e.type === "change") { |
|
|
|
if (!(e.target.value.match(/\s/g))) { |
|
|
|
const newValue = await e.target.value.toUpperCase() |
|
|
|
await formik.setFieldValue("idNo", newValue) |
|
|
|
ele.setSelectionRange(startPos, startPos) |
|
|
|
} else { |
|
|
|
await formik.setFieldValue("idNo", formik.values.idNo) |
|
|
|
ele.setSelectionRange(startPos-1, startPos-1) |
|
|
|
} |
|
|
|
} |
|
|
|
}} |
|
|
|
placeholder="證件號碼" |
|
|
|
fullWidth |
|
|
|
sx={{mr:1}} |
|
|
|