☎️

電話番号の正規表現(TypeScript)

2023/07/04に公開

ハイフンを必須入力にしたいという要望から、かるい気持ちでネットを検索すると以下のようなものができてきました。

function isValidJapanesePhoneNumber(phoneNumber: string): boolean {
  const regex = /^0\d{1,4}-\d{1,4}-\d{3,4}$/;
  return regex.test(phoneNumber);
}

// 使用例
const phoneNumber1 = "03-1234-5678";
const phoneNumber2 = "090-1234-5678";
const phoneNumber3 = "0120-123-456";

console.log(isValidJapanesePhoneNumber(phoneNumber1)); // true
console.log(isValidJapanesePhoneNumber(phoneNumber2)); // true
console.log(isValidJapanesePhoneNumber(phoneNumber3)); // true

ただこれだけだと03-1-222みたいなへんてこりんがOKになってしまうのでChatGPTに聞いてみたら以下のようになった

function isValidJapanesePhoneNumber(phoneNumber: string): boolean {
  const regex = /^0(?:\d{1}-\d{4}-\d{4}|\d{2}-\d{3}-\d{4}|\d{2}-\d{4}-\d{3}|\d{3}-\d{2}-\d{4}|\d{3}-\d{3}-\d{3}|\d{4}-\d{1}-\d{4})$/;
  return regex.test(phoneNumber);
}

// 使用例
const phoneNumber1 = "03-1234-5678";
const phoneNumber2 = "090-1234-5678";
const phoneNumber3 = "0120-123-456";
const phoneNumber4 = "05-3-244";

console.log(isValidJapanesePhoneNumber(phoneNumber1)); // true
console.log(isValidJapanesePhoneNumber(phoneNumber2)); // true
console.log(isValidJapanesePhoneNumber(phoneNumber3)); // true
console.log(isValidJapanesePhoneNumber(phoneNumber4)); // false

Discussion