【问题标题】:preg_match function for checking currency Value用于检查货币值的 preg_match 函数
【发布时间】:2015-01-11 19:55:33
【问题描述】:

我有一些价值观,比如

£523.22
9454
££45523
741.03
etc

我想从值中删除这个 £ 并检查它是否是有效的值,以便我可以将它们插入数据库 我在preg_match() or similar function for checking currency.y 的帮助下创建了以下表达式

$job_order=(preg_match("/^[£]*[0-9]*(.[0-9]*)?$/",$value) ? str_replace("£","",$value) : '' );

如果 $value =£523.22 则返回 null 。但是如果它的 741.03 thn 它的工作。我不知道这个 preg_match 有什么问题。 我从 .Mer(Merge) 文件中导入这个值。如果我只是写 $value=£523.22 那么它的工作但是当它从文件中读取值时它不能识别井号

【问题讨论】:

  • 您可以去掉井号并检查其余是否为数字。 is_numeric()
  • 是的,我试过了,如果我删除磅标记然后它就可以工作了
  • 您的数字格式标准是什么(千位分隔符、小数位数、前导小数点、最大值和最小值)?货币符号可以在末尾吗?总是£
  • 没有标准。这里只想删除磅符号并检查其是否有效
  • 如果用户输入这样的内容:12£34?

标签: php regex preg-match


【解决方案1】:

你可以用这个:

$job_order = strtr($value, '£', '');
if (is_numeric($job_order)) {
    // valid
} else {
    // invalid
}

【讨论】:

    【解决方案2】:

    怎么样:

    $value = preg_replace(/'£(?=\d+)/' , '', $value);
    

    或者,如果值可以是£.50

    $value = preg_replace(/'£(?=\.?\d+)/' , '', $value);
    

    【讨论】:

    • 它没有删除井号我的意思是常规 exp 与值不匹配
    • @Kreya:对不起,我没听懂。可能您想修改您的问题并添加一些示例字符串和预期结果。
    【解决方案3】:

    试试这个货币匹配/^((?:\d{1,3}[,\.]?)+\d*)$/

    (preg_match('/^((?:\d{1,3}[,\.]?)+\d*)$/',,$value) ? str_replace("£","",$value) : '' );
    

    \d{1,3} 一到三位数

    你可以使用\d{1,X}增加数量

    【讨论】:

    • 感谢您的回复。这里不去掉英镑符号。对于 £523.22 它给出空值而不是 523.22
    • 你可以逐行调试代码我认为我的答案对你有用..你可以更改这行代码而不是这个 str_replace("£"," ",$value)跨度>
    • 访问下面的链接它会帮助你stackoverflow.com/questions/4982291/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多