【问题标题】:Regex expression w/ set length带设置长度的正则表达式
【发布时间】:2013-02-18 18:47:27
【问题描述】:

我使用 Pentaho 将数千行加载到数据库中。我必须将字符串值长度保持在 4 个字符。源文件可能只有一个字符,但仍需要将长度保持在 4 个字符以保持数据库的一致性。

示例:
来源:10
数据库预期结果:0010

我在字符串转换中使用了替换,或者可以使用 java 表达式,任何一个都可以。请帮助并使用任一方法(Regex 或 Javascript 表达式)提供解决方案。

谢谢,

【问题讨论】:

  • Pentaho 的平台是 Java。
  • 你试过什么?请向我们展示一些代码,否则您的问题可能会被关闭。

标签: java javascript regex etl pentaho


【解决方案1】:

在 Java 中,您可以使用带有格式说明符的 String.format(...) 将您的号码用零填充到 4 位:

String.format("%04d", yournumber);

在 Javascript 中,您可以使用 sprintf(...) 来完成相同的任务:

var s = sprintf("%04d", yournumber);

所以sprintf() 显然不是标准的 Javascript,而是一个库,如果你愿意,你可以下载。不过,您始终可以这样做以获得 4 位数:

// take the last 4 digits from the right
var s = String("0000" + yournumber).slice(-4); 

你实际上可以把它变成一个简单的左填充函数:

String.prototype.leftPad = function(paddingValue, paddingLength) {
   return (new Array(paddingLength + 1).join(paddingValue) + this).slice(-paddingLength);
};

var s = String(yournumber).leftPad("0", 4)

【讨论】:

【解决方案2】:

(如果你指的是 Javascript):

var str = "10";
function padIt(s) {
    s = ""+s;
    while (s.length < 4) {
        s = "0" + s;
    }
    return s;
}
console.log(padIt(str));

http://jsfiddle.net/EzqRM/1/

【讨论】:

    【解决方案3】:

    对于数字的任意填充,在javascript中:

    // padLeft(
    //   number to pad
    //   length to pad to
    //   character to pad with[optional, uses 0's if not specified]
    // )
    function padLeft(num, pad, padchr) {
        num = "" + num;
        pad = (pad || num.length) + 1;
        return (num.length < pad ? new Array(pad - num.length).join(padchr || "0") : "") + num;
    }
    
    // returns "0010"
    var input = 10
    padded = padLeft(input, 4) 
    

    【讨论】:

    • 这假设您只想用零填充。
    • 那是 OP 要求的,不是吗?
    • 我确实更新了它,以便它可以接受填充字符。
    猜你喜欢
    • 2017-01-09
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多