Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
338 views
in Technique[技术] by (71.8m points)

Regex for Mobile Number Validation

I want a regex for mobile number validation. The regex pattern should be such that it must accept + only in beginning and space(or -) should be allowed only after country code(only once). Only 10 digit number should be allowed after the country code. The country code should be optional. If country code doesn't exist, it should accept only 10 digit number. Regex should prevent any invalid number like (eg:+91 0000000000 or 0000000000).

The regex should accept numbers like

  • +1 8087339090
  • +91 8087339090
  • +912 8087339090
  • 8087339090
  • 08087339090
  • +1-8087339090
  • +91-8087339090
  • +912-8087339090
  • +918087677876(Country code(2 digits) + 10 digits Mobile Number)
  • +9108087735454(Country code(3 digits) + 10 digits Mobile Number)

The regex should not accept numbers like

  • ++51 874645(double successive +)
  • +71 84364356(double successive spaces)
  • +91 808 75 74 678(not more than one space)
  • +91 808-75-74-678(not more than one -)
  • +91-846363
  • 80873(number less than 10 digit)
  • 8087339090456(number greater than 10 digit)
  • 0000000000(all zeros)
  • +91 0000000(all zeros with country code)
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Satisfies all your requirements if you use the trick told below

Regex: /^(+d{1,3}[- ]?)?d{10}$/

  1. ^ start of line
  2. A + followed by d+ followed by a or - which are optional.
  3. Whole point two is optional.
  4. Negative lookahead to make sure 0s do not follow.
  5. Match d+ 10 times.
  6. Line end.

DEMO Added multiline flag in demo to check for all cases

P.S. You really need to specify which language you use so as to use an if condition something like below:

// true if above regex is satisfied and (&&) it does not (`!`) match `0`s `5` or more times

if(number.match(/^(+d{1,3}[- ]?)?d{10}$/) && ! (number.match(/0{5,}/)) )

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...