验证确定长度的数字的字符串向量
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"
然后将数字转换回字符串并不会恢复前导零。
改用字符串向量(作为第一条评论的作者推荐)。
我正在尝试通过 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"
然后将数字转换回字符串并不会恢复前导零。
改用字符串向量(作为第一条评论的作者推荐)。