php - 在 Woocommerce 验证结帐表单中处理多个子字符串
问题描述
几年前,有人向我们的网站(Wordpress/Woocommerce Checkout)添加了代码,该代码根据前缀和字段长度验证字段。
字段验证代码如下所示:
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' );
}
它验证 MA- 和 9 个字母的整体长度。例如,MA-123123 可以,MA-123 不行。
现在我们要针对 MA-xxxxxx 和 BW-xxxxxx 进行验证,但我不确定正确的语法如何。
我已经尝试了以下方法:
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' );
}
但是这样验证再次失败,MA-和BW-。
有人可以帮我弄这个吗?
解决方案
以下 usingin_array()
将处理两个子字符串,如下所示:
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' );
}
}
或以preg_match()
这种方式使用:
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' );
}
}
测试和工作。
推荐阅读
- ios - 弹回时 TabView 中的 NavigationView 使应用程序崩溃
- json - 转换后的 json 结果结构与源不同
- java - 如何使搜索活动在每个字符输入时都命中 API - AndroidX
- python - 在 python 中从多个文件读取和存储输入数据的有效方法是什么?
- javascript - 添加到 useEffect 中的对象
- javascript - jQuery / Ajax 在警报中正确发送“data-”值,但无法将其附加到 php 内的特定 div 中
- ios - CapsPageMenu 隐藏 TableView 上的 NavigationBar 从子 UIViewController 滚动不起作用
- vue.js - Vue 观察者的第一个回调在实例化后的观察者中没有“正确”排序
- javascript - 图片库悬停叠加高度问题
- node.js - Node.js 和 RabbitMQ - 在服务器启动时初始化连接的最佳方式