我正在编写这段代码。当我输入数字或特殊字符时,它就起作用了。但即使只输入了Chars,它也显示出了相同的验证。有人能帮我如何验证名字吗;姓氏字段字符ony?
add_action( 'woocommerce_after_checkout_validation', 'misha_validate_fname_lname', 10, 2);
function misha_validate_fname_lname( $fields, $errors ){
if ( preg_match( '/^[a-zA-Z ]*$/', $fields[ 'billing_first_name' ] ) || preg_match( '/^[a-zA-Z ]*$/', $fields[ 'billing_last_name' ] ) ){
$errors->add( 'validation', 'Only characters required' );
}
}
我认为您希望在名称字段中只允许字母,在这种情况下,您可以使用ctype_alpha((函数
add_action( 'woocommerce_after_checkout_validation', 'validate_name', 10, 2);
function validate_name( $fields, $errors ){
$billing_first_name = $fields[ 'billing_first_name' ];
if ( !ctype_alpha($billing_first_name)){
wc_add_notice(__('Only alphabets are alowed in <strong>Billing First Name</strong>.'), 'error');
}
}
代码进入functions.php tested&工作
您可以使用以下代码。
add_action( 'woocommerce_after_checkout_validation', 'bks_validate_fname_lname', 10, 2);
function bks_validate_fname_lname( $fields, $errors ){
if (!preg_match( '/^[a-zA-Z ]+$/', $fields[ 'billing_first_name' ])){
$errors->add( 'validation', 'First name should only have no special characters.' );
}
if (!preg_match( '/^[a-zA-Z ]+$/', $fields[ 'billing_last_name' ])){
$errors->add( 'validation', 'Last name should only have no special characters.' );
}
}
没有什么值得注意的
- 正如@CBroe在评论中所说,你应该使用
+
而不是*
,因为它会检查空提交 - 您在if条件下错过了
!
- 最好告诉用户问题的确切位置,我已经划分了代码,并分别检查了它们