Rexact
Cheatsheet

Regex Stripe API key (sk_live_, pk_test_…)

A Stripe API key is written type_mode_body: the type is sk (secret), rk (restricted) or pk (publishable), the mode is test (sandbox) or live (production), and the body is alphanumeric. Stripe's documentation only fixes these prefixes (sk_live_, rk_test_, pk_live_…), not the body length; the bounds come from detectors, which vary: exactly 24 characters in detect-secrets, 20 to 247 in trufflehog, 10 to 99 in gitleaks. The three tools I read only look at secret or restricted keys, and two ignore test keys. Here's an anchored pattern covering the three types and both modes, compared against those tools.

/^(?:sk|rk|pk)_(?:test|live)_[A-Za-z0-9]{24,247}$/
passes 24/24 cases

Comparison of existing patterns

Implementation

const re = new RegExp("^(?:sk|rk|pk)_(?:test|live)_[A-Za-z0-9]{24,247}$", "");
re.test(input);

Limits

  • Valide seulement la FORME : ne prouve pas que la clé existe ni qu'elle est active (seule l'API de Stripe peut le dire). Une clé sk_live_ valide en forme mais inventée passe ce motif.
  • La documentation de Stripe ne fixe ni la longueur ni l'alphabet du corps : la borne de 24 à 247 caractères alphanumériques est un choix inspiré de detect-secrets et de trufflehog, pas une règle publiée. Si Stripe change le format, adaptez-la.
  • Les clés d'organisation (sk_org_…) et les clés gérées émises par des plateformes d'hébergement sont mentionnées par la documentation mais ne sont pas couvertes. Les secrets de webhook (whsec_…) et les identifiants d'objets (pi_…, cus_…) sont d'autres formats.
  • Une clé pk_ est publiable (côté client) ; sk_ et rk_ sont des secrets : ne les mettez jamais dans le code ni dans un outil en ligne, et n'utilisez que des chaînes factices pour les tests.

Related pages