【问题标题】:Removing toLocaleString formating when checking field validation检查字段验证时删除 toLocaleString 格式
【发布时间】:2017-09-15 09:00:04
【问题描述】:

我有一个表单字段(字符串),我正在使用此脚本为其添加“空格”千位分隔符:

 <script type="text/javascript">
// https://stackoverflow.com/questions/19470499/how-to-format-input-box-text-as-i-am-typing-it
    jQuery(document).ready(function($) {
        $("#input_10").on('keyup', function(){
        var n = parseInt($(this).val().replace(/\D/g,''),10);
        $(this).val(n.toLocaleString());
        });
    </script>

所以用户输入:“100000”,它会显示“100 000”

稍后,在表单提交期间,我有一个 PHP 语句来验证该字段是否包含数值。

现在问题来了($value是格式化字段的值):

  1. is_numeric($value) 不正确,因为“空格”千位分隔符,所以我尝试删除空格但是:
  2. is_numeric(str_replace(' ', '', $value)) 也不为真,不会删除toLocaleString添加的空格

在PHP中做我的字段验证时如何删除jQuery中添加的toLocaleString格式?

编辑:使用的 PHP 代码:

add_filter( 'gform_field_validation_1_10', 'bja_gf_custom_validation10', 10, 4 );
function bja_gf_custom_validation10( $result, $value, $form, $field ) {
    $formatedNumber = str_replace(' ', '', $value);
        if ( $result['is_valid'] && !is_numeric($formatedNumber) ) {
            $result['is_valid'] = false;
            $result['message'] = 'formatedNumber:' . $formatedNumber;
        }
        return $result;
}

谢谢!

【问题讨论】:

  • is_numeric(str_replace(" ","","100 000"));true。向我们展示您的 PHP 代码。
  • 是的,但问题是 toLocaleString 可能添加了一个 不是 空格的字符。如果我输入“100000”(呈现为“100 000”)然后执行 PHP:ord(substr($value,4,1)); 我收到 ascii 代码 160...
  • 也许看看从 PHP 字符串中删除 ASCII 字符:stackoverflow.com/a/1176923/715105

标签: php jquery


【解决方案1】:

ASCII 代码 160 = 不间断空格。

尝试使用此正则表达式来捕获任何类型的空格或不可见的分隔符。

$re = '/\p{Z}/'; // (any kind of whitespace or invisible separator)
$str = '100 000'; // Your form input    
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);    
// Print the entire match result
var_dump($matches);

获得匹配/结果后,您可以将它们从变量中删除。

在这里测试一下:https://regex101.com/r/sdHYmw/1

如果它只是您要删除的不间断空格,并且您的页面使用 UTF-8 编码,在这种情况下,不间断空格的编码是 0xC2 0xA0...您也可以试试这个:

$YourFormInput = trim($YourFormInput, "\xC2\xA0");

【讨论】:

  • 嗯,它没有捕捉到任何东西。我什至尝试使用以下命令直接替换 chr(160):$formatedNumber = str_replace(chr(160), "", $value); 但最后我得到的是菱形字符中的问号,而不是字符 160。
  • 也许看看从 PHP 字符串中删除 ASCII 字符:stackoverflow.com/a/1176923/715105
【解决方案2】:

你必须使用: preg_replace("/[^\d]+/","",$my_var);

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 1970-01-01
    • 2019-07-23
    • 2021-02-11
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    相关资源
    最近更新 更多