WooCommerce phone 如果字段仅包含一个“0”字符,则数字字段验证不起作用
WooCommerce phone number field validation not working if the field contains only one "0" character
我写了一个正则表达式来验证 WooCommerce 中的 phone 数字。它适用于所有情况,除非该字段包含单个“0”字符。
可能是什么错误?
这是代码:
$post_value = $_POST['billing_phone'];
if ( $post_value && ! preg_match( '/^(\+49)[0-9]{9,}$/', $post_value ) ) {
//error
}
您的正则表达式与 0
或 +490
不匹配。所以问题可能是当 POST 参数 'billing_phone'
为 0 时 if 语句中的某些内容不同。在 PHP if (int)
中对于除 0 和 false 以外的任何 int 都是 true对于 0,也许这就是问题所在?
所以你可以通过这样的方式解决这个问题:
if ( ($post_value || $post_value == 0) && ! preg_match( '/^(\+49)[0-9]{9,}$/', $post_value ) ) {
(免责声明:我对PHP一般不是很熟悉。)
您可以使用仅匹配单个零的交替来编写模式。
如果处理后不需要 +49
的单独捕获组,则可以省略它。
^(?:\+49\d{9,}|0)$
看到一个regex demo。
我写了一个正则表达式来验证 WooCommerce 中的 phone 数字。它适用于所有情况,除非该字段包含单个“0”字符。
可能是什么错误?
这是代码:
$post_value = $_POST['billing_phone'];
if ( $post_value && ! preg_match( '/^(\+49)[0-9]{9,}$/', $post_value ) ) {
//error
}
您的正则表达式与 0
或 +490
不匹配。所以问题可能是当 POST 参数 'billing_phone'
为 0 时 if 语句中的某些内容不同。在 PHP if (int)
中对于除 0 和 false 以外的任何 int 都是 true对于 0,也许这就是问题所在?
所以你可以通过这样的方式解决这个问题:
if ( ($post_value || $post_value == 0) && ! preg_match( '/^(\+49)[0-9]{9,}$/', $post_value ) ) {
(免责声明:我对PHP一般不是很熟悉。)
您可以使用仅匹配单个零的交替来编写模式。
如果处理后不需要 +49
的单独捕获组,则可以省略它。
^(?:\+49\d{9,}|0)$
看到一个regex demo。