检查字段验证时删除toLocaleString格式

时间:2017-09-15 09:00:04

标签: php jquery

我有一个表单字段(字符串),我在其中添加了"空格"使用此脚本的千位分隔符:

 <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>

所以用户类型:&#34; 100000&#34;它将显示&#34; 100 000&#34;

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

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

    由于&#34;空格&#34;
  1. is_numeric($ value)不成立千分隔符,所以我尝试删除空格但是:
  2. is_numeric(str_replace(&#39;&#39;,&#39;&#39;,$ value))也不是,并且不会删除toLocaleString添加的空间
  3. 如何删除在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;
    }
    

    谢谢!

2 个答案:

答案 0 :(得分:0)

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");

答案 1 :(得分:0)

你有使用权: preg_replace函数(&#34; / [^ \ d] + /&#34;&#34;&#34;,$ my_var);