Skip to content

postmodern/chars.rb

Repository files navigation

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 {file:LICENSE.txt} for license information.

About

A Ruby library for working with various character sets, recognizing text and generating random text from specific character sets.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Languages