# Chars [![CI](https://github.com/postmodern/chars.rb/actions/workflows/ruby.yml/badge.svg)](https://github.com/postmodern/chars.rb/actions/workflows/ruby.yml) * [Source](https://github.com/postmodern/chars.rb#readme) * [Issues](https://github.com/postmodern/chars.rb/issues) * [Documentation](https://rubydoc.info/gems/chars) ## Description Chars is a Ruby library for working with various character sets, recognizing text and generating random text from specific character sets. ## Features * Provides character sets for: * Numeric: `0` - `9` * Octal: `0` - `7` * Uppercase Hexadecimal: `0` - `9`, `A` - `F` * Lowercase Hexadecimal: `0` - `9`, `a` - `f` * Hexadecimal: `0` - `9`, `a` - `f`, `A` - `F` * Uppercase Alpha: `A` - `Z` * Lowercase Alpha: `a` - `z` * Alpha: `a` - `z`, `A` - `Z` * Alpha-numeric: `0` - `9`, `a` - `z`, `A` - `Z` * Punctuation: `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!` * Symbols: `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, `*`, `_`, `+`, `=`, `|`, `\`, `<`, `>`, `/` * Space: `' '`, `\f`, `\n`, `\r`, `\t`, `\v` * Visible: `0` - `9`, `a` - `z`, `A` - `Z`, `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, `*`, `_`, `+`, `=`, `|`, `\`, `<`, `>`, `/` * Printable: `0` - `9`, `a` - `z`, `A` - `Z`, `' '`, `'`, `"`, `` ` ``, `,`, `;`, `:`, `~`, `-`, `(`, `)`, `[`, `]`, `{`, `}`, `.`, `?`, `!`, `@`, `#`, `$`, `%`, `^`, `&`, *, _, `+`, `=`, `|`, `\`, `<`, `>`, `/` * Control: `\x00` - `\x1f`, `\x7f` * Signed ASCII: `\x00` - `\x7f` * ASCII: `\x00` - `\xff` ## Examples Determine whether a byte belongs to a character set: ```ruby 0x41.alpha? # => true ``` Determine whether a String belongs to a character set: ```ruby "22e1c0".hex? # => true ``` Return a random character from the set of all characters: ```ruby Chars.all.random_char # => "\x94" ``` Return a random Array of characters from the alpha-numeric character set: ```ruby Chars.alpha_numeric.random_chars(10) # => ["Q", "N", "S", "4", "x", "z", "3", "M", "F", "F"] ``` Return a random Array of a random length of unique characters from the visible character set: ```ruby Chars.visible.random_distinct_chars(1..10) # => ["S", "l", "o", "8", "'", "q"] ``` Return a random String from the set of all characters: ```ruby Chars.all.random_string(10) # => "\xc2h\xad\xccm7\x1e6J\x13" ``` Generate a secure password: ```ruby require 'securerandom' Chars.visible.random_string(10..14, random: SecureRandom) # => ".*$X=D*XK2h8gC" ``` Return a random String with a random length between 5 and 10, from the set of space characters: ```ruby Chars.space.random_string(5..10) # => "\r\v\n\t\n\f" ``` Find all sub-strings that belong to a character set within a String: ```ruby ls = File.binread('/bin/ls') Chars.printable.substrings(ls) # => # ["/lib64/ld-linux-x86-64.so.2", # "_ITM_deregisterTMCloneTable", # "__gmon_start__", # "_ITM_registerTMCloneTable", # ... # ] ``` Find all sub-strings that belong to a character set within a String, with indexes: ```ruby ls = File.binread('/bin/ls') Chars.printable.substrings_with_indexes(ls) # => # [["/lib64/ld-linux-x86-64.so.2", 792], # ["_ITM_deregisterTMCloneTable", 4009], # ["__gmon_start__", 4037], # ["_ITM_registerTMCloneTable", 4052], # ... # ] ``` Enumerate over all strings from a character set of a given length: ```ruby passwords = Chars.visible.strings_of_length(6) passwords.each { |password| puts password } # AAAAAA # AAAAAB # AAAAAC # ... ``` Enumerate over all strings from a character set of lengths between 4 and 8: ```ruby passwords = Chars.visible.strings_of_length(4..8) passwords.each { |password| puts password } # AAAA # AAAB # AAAC # ... ``` ## Requirements * [ruby](https://www.ruby-lang.org/) >= 2.0.0 ## Install $ gem install chars ### gemspec ```ruby gem.add_dependency 'chars', '~> 0.3' ``` ### Gemfile ```ruby gem 'chars', '~> 0.3' ``` ## Crystal [chars.cr] is a [Crystal] port of this library. [chars.cr]: https://github.com/postmodern/chars.cr [Crystal]: https://crystal-lang.org/ ## License See {file:LICENSE.txt} for license information.