
Security News
The Code You Didn't Write Is Still Yours to Defend
AI agents are pulling packages into environments no scanner is watching, creating exposure before security teams can see it.
human-regex
Advanced tools
Human-friendly regular expression builder with English-like syntax.
npm install human-regex
import { createRegex } from "human-regex";
// Password validation: 8+ chars with special character, digit, and letter
const passwordRegex = createRegex()
.startAnchor()
.hasSpecialCharacter()
.hasDigit()
.hasLetter()
.anyCharacter()
.atLeast(8)
.endAnchor()
.toRegExp();
console.log(passwordRegex.test("P@ssw0rd")); // true
import { Patterns } from "human-regex";
// Email validation
console.log(Patterns.email().test("test@example.com")); // true
// International phone number
console.log(Patterns.phoneInternational().test("+123-4567890")); // true
// URL validation
console.log(Patterns.url().test("https://www.example.com/path")); // true
createRegex()Creates a new regex builder instance.
| Method | Description | Example Output |
|---|---|---|
.digit() | Adds a digit pattern (\d). | \d |
.word() | Adds a word character pattern (\w). | \w |
.whitespace() | Adds a whitespace character pattern (\s). | \s |
.nonWhitespace() | Adds a non-whitespace character pattern (\S). | \S |
.anyCharacter() | Adds a pattern for any character (.). | . |
.literal("text") | Adds a literal text pattern. | ["text"] |
.or() | Adds an OR pattern. | | |
.newline() | Adds a pattern for newline characters. | (\r\n|\r|\n) |
.range("digit") | Adds a range pattern for digits (0-9). | [0-9] |
.notRange("letter") | Adds a range pattern for non-letters | [^a-zA-Z] |
.anyOf("aeiou\\s") | Adds list of accepted characters | [aeiou\s] |
.notAnyOf("aeiou\\s") | Adds list of excluded characters | [^aeiou\s] |
| Method | Description | Example Output |
|---|---|---|
.exactly(n) | Adds an exact quantifier ({n}). | {n} |
.atLeast(n) | Adds a minimum quantifier ({n,}). | {n,} |
.atMost(n) | Adds a maximum quantifier ({0,n}). | {0,n} |
.between(min, max) | Adds a range quantifier ({min,max}). | {min,max} |
.oneOrMore() | Adds a one-or-more quantifier (+). | + |
.optional() | Adds an optional quantifier (?). | ? |
.zeroOrMore() | Adds a zero-or-more quantifier (*). | * |
.lazy() | Makes the previous quantifier lazy. | ? |
.repeat(count) | Repeats the previous pattern exactly count times. | {count} |
| Method | Description | Example Output |
|---|---|---|
.startGroup() | Starts a non-capturing group ((?:). | (?: |
.startCaptureGroup() | Starts a capturing group ((). | ( |
.startNamedGroup("name") | Starts a named capturing group. | (?<name> |
.endGroup() | Ends a group ()). | ) |
.startAnchor() | Adds a start anchor (^). | ^ |
.endAnchor() | Adds an end anchor ($). | $ |
.wordBoundary() | Adds a word boundary assertion (\b). | \b |
.nonWordBoundary() | Adds a non-word boundary assertion (\B). | \B |
| Method | Description | Example Output |
|---|---|---|
.hasSpecialCharacter() | Adds a lookahead for special characters. | (?=.*[!@#$%^&*]) |
.hasDigit() | Adds a lookahead for digits. | (?=.*\d) |
.hasLetter() | Adds a lookahead for letters. | (?=.*[a-zA-Z]) |
| Method | Description | Example Output |
|---|---|---|
.protocol() | Adds a protocol pattern (https?://). | https?:// |
.www() | Adds a www pattern ((www\.)?). | (www\.)? |
.path() | Adds a path pattern ((/\w+)*). | (/\w+)* |
.tld() | Adds a top-level domain pattern. | ["(com|org|net)"] |
| Method | Description | Example Output |
|---|---|---|
.global() | Adds the global flag (g). | g |
.nonSensitive() | Adds the case-insensitive flag (i). | i |
.multiline() | Adds the multiline flag (m). | m |
.dotAll() | Adds the dot-all flag (s). | s |
.sticky() | Adds the sticky flag (y). | y |
| Method | Description | Example Output |
|---|---|---|
.unicodeChar() | Matches Unicode characters. | \p{L} |
.unicodeDigit() | Matches Unicode digits. | \p{N} |
.unicodePunctuation() | Matches Unicode punctuation. | \p{P} |
.unicodeSymbol() | Matches Unicode symbols. | \p{S} |
Patterns.email: Predefined email pattern.Patterns.url: Predefined URL pattern.Patterns.phoneInternational: Predefined international phone number pattern.For use with range() and notRange():
digit: "0-9", lowercaseLetter: "a-z", uppercaseLetter: "A-Z", letter: "a-zA-Z", alphanumeric: "a-zA-Z0-9", anyCharacter: ".",
| RangeKey | Range value |
|---|---|
digit | 0-9 |
lowercaseLetter | a-z |
uppercaseLetter | A-Z |
letter | a-zA-Z |
alphanumeric | a-zA-Z0-9 |
anyCharacter | . |
const basePattern = /^[A-Z]/;
const combined = createRegex().regex(basePattern).digit().exactly(3).toRegExp();
createRegex().literal("(?<=@)").word().oneOrMore().toRegExp();
createRegex()
.literal("(?<year>\\d{4})")
.literal("-")
.literal("(?<month>\\d{2})")
.toRegExp();
We welcome contributions! Please follow the guidelines in CONTRIBUTING.md.
This project is licensed under the MIT License - see the LICENSE file for details.
FAQs
Human-friendly regex builder with English-like syntax
The npm package human-regex receives a total of 422 weekly downloads. As such, human-regex popularity was classified as not popular.
We found that human-regex demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
AI agents are pulling packages into environments no scanner is watching, creating exposure before security teams can see it.

Security News
GitHub Actions checkout now blocks risky pull_request_target checkouts by default to help prevent pwn request supply chain attacks.

Product
Socket now supports Custom Roles and Repository Access Permissions so organizations can control who can access specific repositories and actions.