由於有串接宅急便的api,電話號碼的數值有限制,我做了以下的規則
- 只能打數字
- 09開頭一定要10位數
- 最多限制10碼
由於宅急便的api限制很多,就連台灣人常用的分機碼 # 也不能用,同時也有限制長度
function custom_checkout_field_validation() {
?>
<script type="text/javascript">
jQuery(document).ready(function($){
// 選擇需要檢查的欄位
const phoneFields = ['#billing_phone', '#shipping_phone'];
phoneFields.forEach(function(field) {
$(field).on('input', function() {
let value = $(this).val();
// 只允許輸入數字
const filteredValue = value.replace(/\D/g, ''); // 移除所有非數字字符
// 檢查是否有非數字字符
if (value !== filteredValue) {
// 顯示錯誤訊息
$(this).next('.error-message').remove();
$(this).after('<span class="error-message" style="color:red;">請輸入數字,如有分機請於地址後備註</span>');
} else {
// 移除錯誤訊息
$(this).next('.error-message').remove();
}
// 將過濾後的值回填到欄位
$(this).val(filteredValue);
});
});
// 結帳提交時的驗證
$('form.checkout').on('checkout_place_order', function(e){
let isValid = true;
phoneFields.forEach(function(field) {
const value = $(field).val();
const startsWith09 = value.startsWith('09');
// 檢查以 "09" 開頭的電話號碼是否為10碼
if (startsWith09 && value.length !== 10) {
isValid = false;
$(field).next('.error-message').remove();
$(field).after('<span class="error-message" style="color:red;">09開頭的電話號碼必須填滿10碼</span>');
}
// 檢查所有電話號碼是否只包含數字且不超過10碼
else if (!/^\d{1,10}$/.test(value)) {
isValid = false;
$(field).next('.error-message').remove();
$(field).after('<span class="error-message" style="color:red;">請輸入數字,如有分機請於地址後備註</span>');
}
});
if (!isValid) {
e.preventDefault(); // 阻止表單提交
alert('請確保09開頭的電話號碼為10碼,並且輸入數字,如有分機請於地址後備註');
return false; // 返回false以確保表單不會提交
}
});
});
</script>
<?php
}
add_action('wp_footer', 'custom_checkout_field_validation');