验证确定长度的数字的字符串向量

Validating string vector of digits of determined length

我正在尝试通过 grepl 和 regexp 验证字符串中的数字向量。所以我发现 grepl 自动 trim 前导零,所以我得到了错误的答案。我尝试使用 as.character 但没有成功。

这是我的功能:

isValidTest <- function(x){
  x <- as.character(x)
  grepl("^[[:digit:]]{13}$", x)
}

和我的测试:

> isValidTest(c(9788467850703,0759398399, 3002011502068, 0788467850703))
[1]  TRUE FALSE  TRUE FALSE

用引号代替:

> isValidTest(c(9788467850703,0759398399, 3002011502068, "0788467850703"))
[1]  TRUE FALSE  TRUE  TRUE

请注意以 0 0788467850703 开头的向量的最后一项,我想检索一个 TRUE 答案。另一方面,为什么 as.character 不起作用?

as.character 没有按预期工作,因为您构造的向量被强制转换为数字并丢失了前导零:

> x <- c(9788467850703,0759398399, 3002011502068, 0788467850703)
> x
[1] 9.788468e+12 7.593984e+08 3.002012e+12 7.884679e+11
> lapply(x,class)
[[1]]
[1] "numeric"

[[2]]
[1] "numeric"

[[3]]
[1] "numeric"

[[4]]
[1] "numeric"

然后将数字转换回字符串并不会恢复前导零。

改用字符串向量(作为第一条评论的作者推荐)。