Chars

CI

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:

0x41.alpha?
# => true

Determine whether a String belongs to a character set:

"22e1c0".hex?
# => true

Return a random character from the set of all characters:

Chars.all.random_char
# => "\x94"

Return a random Array of characters from the alpha-numeric character set:

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:

Chars.visible.random_distinct_chars(1..10)
# => ["S", "l", "o", "8", "'", "q"]

Return a random String from the set of all characters:

Chars.all.random_string(10)
# => "\xc2h\xad\xccm7\x1e6J\x13"

Generate a secure password:

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:

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:

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:

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:

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:

passwords = Chars.visible.strings_of_length(4..8)
passwords.each { |password| puts password }
# AAAA
# AAAB
# AAAC
# ...

Requirements

Install

$ gem install chars

gemspec

gem.add_dependency 'chars', '~> 0.3'

Gemfile

gem 'chars', '~> 0.3'

Crystal

chars.cr is a Crystal port of this library.

License

See LICENSE for license information.