首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >test.check生成一定长度的字符串。

test.check生成一定长度的字符串。
EN

Stack Overflow用户
提问于 2016-03-13 17:31:21
回答 3查看 1.9K关注 0票数 5

在使用test.check时,我需要一个特定长度字符串的生成器。电话号码、邮政编码、社会保险号码都是这类数据的例子。虽然这些例子似乎只是数字,但我的问题是一般的字符串。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-13 18:28:32

给定length,下面的生成器生成随机字符串:

代码语言:javascript
复制
(gen/fmap #(apply str %) 
          (gen/vector gen/char-alpha length))

(gen/vector gen/char-alpha length)生成字符序列,fmap将它们转换为字符串:

代码语言:javascript
复制
(apply str [\a \b]) ;; => "ab"

如果需要自定义alphabet (例如[\a \b \c]),则可以用以下内容替换gen/char-alpha

代码语言:javascript
复制
(gen/elements alphabet)

对于更复杂的生成器,比如格式化的电话号码,test.chuckstring-from-regex可能是一个比手工组合官方生成器更好的选择。

票数 9
EN

Stack Overflow用户

发布于 2016-03-13 17:47:42

此函数将生成一个给定长度的字符串,该字符串包含给定字母表中的字符(可选)。如果不将任何字母作为参数传递,则将使用默认值,这当然可以更改。

代码语言:javascript
复制
(defn generate-string 
  ([length]
   (generate-string length
            (map char (range 49 127))))
  ([length alphabet]
   (apply str (take length (repeatedly #(rand-nth alphabet))))))

示例:

代码语言:javascript
复制
(generate-string 7 [\a \b \c])
"bacacbb"

(generate-string 10)
"mxqE<OKH3L"
票数 2
EN

Stack Overflow用户

发布于 2019-11-12 21:04:44

您可以使用更原始的生成器来快速构建这样一个生成器:

对于min和max之间的字母数字字符串:

代码语言:javascript
复制
(sgen/fmap str/join (sgen/vector (sgen/char-alphanumeric) min max))

用于精确给定长度的字母数字字符串。

代码语言:javascript
复制
(sgen/fmap str/join (sgen/vector (sgen/char-alphanumeric) length))

您也可以相应地将(sgen/char-alphanumeric)修改为您需要的字符范围,例如字符串min/max加上字母、数字、下划线和破折号字符,每个字符的频率不同:

代码语言:javascript
复制
(sgen/fmap str/join
                (sgen/vector
                 (sgen/frequency [[99 (sgen/char-alphanumeric)]
                                  [1 (sgen/elements #{"_" "-"})]])
                 min max))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35973388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档