a few years ago someone added code to our website (WordPress/Woocommerce Checkout), which validates a field against a prefix and field length.
The field validation code looks like this:
JavaScript
x
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
if ((substr($_POST['billing_manr'],0,3) <> "MA-") || (strlen($_POST['billing_manr']) <> 9))
wc_add_notice( __( 'Error code ...' ), 'error' );
}
It validates against MA- and an allover length of 9 letters. For example, MA-123123 is OK, MA-123 isn’t.
Now we want to validate against MA-xxxxxx and BW-xxxxxx but I’m not sure how the correct syntax is.
I tried already the following:
JavaScript
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
if ((substr($_POST['billing_manr'],0,3) <> "MA-") || (substr($_POST['billing_manr'],0,3) <> "BW-") || (strlen($_POST['billing_manr']) <> 9))
wc_add_notice( __( 'Error code ...' ), 'error' );
}
But with this the validation fails again both, MA- and BW-.
Can someone help me with this?
Advertisement
Answer
The following using in_array()
will handle both substrings as follow:
JavaScript
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
if ( isset($_POST['billing_manr'])
&& ( ! in_array( substr($_POST['billing_manr'], 0, 3), array('MA-', 'BW-') )
|| strlen($_POST['billing_manr']) <> 9 ) ) {
wc_add_notice( __( 'Error code ...', 'woocommerce' ), 'error' );
}
}
or using preg_match()
too this way:
JavaScript
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
if ( isset($_POST['billing_manr'])
&& ( ! preg_match('/^MA-|BC-/', $_POST['billing_manr'])
|| strlen($_POST['billing_manr']) <> 9 ) ) {
wc_add_notice( __( 'Error code ...', 'woocommerce' ), 'error' );
}
}
Tested and works.