仅字符验证 Woocommerce名字和姓氏



我正在编写这段代码。当我输入数字或特殊字符时,它就起作用了。但即使只输入了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.' );
}
}

没有什么值得注意的

  1. 正如@CBroe在评论中所说,你应该使用+而不是*,因为它会检查空提交
  2. 您在if条件下错过了!
  3. 最好告诉用户问题的确切位置,我已经划分了代码,并分别检查了它们

最新更新