Rexact
Cheatsheet

Regex Japanese phone number

A Japanese number has 10 digits (landline, with a 1-to-5-digit area code) or 11 (mobile 070, 080, 090; 0800). With +81, the leading 0 disappears. The real attempts I read accept nonexistent prefixes: sent.dm's accepts '010-1234-5678' (010 is the international access prefix), '030-1234-5678' and '090-0123-4567' (a mobile's 4th digit is never 0), and refuses every +81 form. validator.js's only covers mobiles. Here's a pattern handling the three families and the +81 format, compared against those attempts.

/^(?:0|\+81[ -]?)(?:[789]0-?[1-9](?:-?[0-9]){7}|(?![789]0|120|800|50)[1-9](?:-?[0-9]){8}|120(?:-?[0-9]){6}|800(?:-?[0-9]){7})$/
passes 26/26 cases

Comparison of existing patterns

SourcepatternScore on the corpusReDoS
validator.js (ja-JP) — mobiles seulement, tiret ou espace facultatifs : accepte 090-0123-4567 (4e chiffre 0) et le préfixe 060, pas encore en service ; rejette tout fixe^(\+81[ \-]?(\(0\))?|0)[6789]0[ \-]?\d{4}[ \-]?\d{4}$17 / 26safe
sent.dm (guide du fournisseur, trois regex réunies par |) — « 0\d{1,4}-?\d{1,4}-?\d{4} » accepte presque tout préfixe : 010-1234-5678, 030-1234-5678, 00-1234-5678 passent ; aucune forme +81^(070|080|090)-?\d{4}-?\d{4}$|^0\d{1,4}-?\d{1,4}-?\d{4}$|^(0120|0800)-?\d{3}-?\d{3,4}$18 / 26safe
japhonex (npm, obscur) — formats avec tirets seulement, aucune forme +81 ni sans tiret ; la 2e branche n'exige pas de 0 initial : « 123-4567-8901 » passe ; « 010-1234-5678 » et « 090-0123-4567 » passent(^0([0-9]-[0-9]{4}|[0-9]{2}-[0-9]{3}|[0-9]{3}-[0-9]{2}|[0-9]{4}-[0-9]{1})-[0-9]{4}$)|(^[0-9]{3}-[0-9]{4}-[0-9]{4}$)|(^0120-([0-9]-[0-9]{5}|[0-9]{2}-[0-9]{4}|[0-9]{3}-[0-9]{3}|[0-9]{4}-[0-9]{2}|[0-9]{5}-[0-9]|[0-9]{6})$)16 / 26safe

Implementation

const re = new RegExp("^(?:0|\\+81[ -]?)(?:[789]0-?[1-9](?:-?[0-9]){7}|(?![789]0|120|800|50)[1-9](?:-?[0-9]){8}|120(?:-?[0-9]){6}|800(?:-?[0-9]){7})$", "");
re.test(input);

Limits

  • Valide seulement la FORME : ne vérifie pas que le numéro est attribué ni que l'indicatif régional existe : « 099-123-4567 » (un fixe de format valide) passe. Les longueurs viennent des métadonnées de libphonenumber, la page du ministère consultée ne les donnant pas.
  • Le préfixe 060 (mobile, ajouté au plan en décembre 2024) est rejeté parce que son lancement a été reporté d'après les opérateurs (annonce de juillet 2026) : ajoutez 6 à la classe [789] le jour où il est en service.
  • Les numéros 050 (IP), 0800 et 0120 sont acceptés mais pas les services à numérotation spéciale (0570, 0990…) : ils sont rejetés. Le préfixe +81 est accepté avec un tiret ou une espace, sans le 0 initial : « +81 090-… » est rejeté.
  • Tirets facultatifs, placés n'importe où entre les chiffres : « 0-3-1-2-3… » est donc accepté. Les chiffres pleine chasse sont rejetés ; normalisez avant validation.

Related pages