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

时间:2017-03-01 07:52:11

标签: r regex grepl

我试图通过grepl和regexp验证字符串中的数字向量。所以我发现grepl自动修剪前导零,所以我得到了错误的答案。我尝试使用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开头的向量的最后一项,我想检索一个真正的答案。另一方面,为什么as.character不起作用?

1 个答案:

答案 0 :(得分:0)

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"

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

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