2017-09-15 122 views
0

时卸下的toLocaleString格式化我有一个表单字段(字符串)为此我加入了“空间”千个分隔符使用这个脚本:检查现场验证

<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语句来验证该字段是否包含数值。

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

  1. is_numeric($值)是不正确的,由于“空间”千个分隔符,所以我试图消除空间,但:
  2. is_numeric(str_replace函数(””,‘’,$值))也是不正确的,不通过的toLocaleString

删除添加的空间怎样删除已jQuery中添加了的toLocaleString格式什么时候在PHP中进行字段验证?

编辑: 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; 
} 

谢谢!

+1

'is_numeric(str_replace(“”,“”,“100 000”));'是'true'。告诉我们你的PHP代码。 – JustBaron

+0

是的,但问题是toLocaleString可能添加了一个不是**空格的char。 如果我输入 “100000”(其呈现为 “100 000”),然后执行一个PHP: 'ORD(SUBSTR($值,4,1));' 我接收的ASCII码160 .. 。 – SeriousBen74

+0

也许看看从PHP字符串中删除ASCII字符:https://stackoverflow.com/a/1176923/715105 – JustBaron

回答

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

Humm它没有捕获任何东西。我甚至尝试用下面的代码直接替换chr(160): '$ formatedNumber = str_replace(chr(160),“”,$ value);' 但是最后我用钻石中的问号字符而不是字符160. – SeriousBen74

+0

也许看看从PHP字符串中删除ASCII字符:https://stackoverflow.com/a/1176923/715105 – JustBaron

0

你必须中庸之道使用: 的preg_replace( “/ [^ \ d] + /”, “”,$ my_var);