2010-07-15 34 views
6

Tôi biết có rất nhiều ví dụ về cách so khớp các loại số điện thoại nhất định. Đối với ví dụ của tôi, tôi chỉ muốn cho phép các số và một vài ký tự đặc biệt. Tôi lại gặp khó khăn trong việc đạt được điều này.Regex - số điện thoại đơn giản

Số điện thoại cần được cho phép có thể dùng những hình thức

5555555555 
555-555-5555 
(555)5555555 
(555)-555-5555 
(555)555-5555 and so on 

Tôi chỉ muốn một cái gì đó mà sẽ cho phép [0-9] và cũng có ký tự đặc biệt '(', ')', và '-'

cho đến nay biểu hiện của tôi trông như thế này

/^[0-9]*^[()-]*$/ 

tôi biết điều này là sai nhưng logic tôi tin rằng điều này có nghĩa phép số 0-9 hoặc và cho phép ký tự (,), và -.

+0

Tôi cũng khuyên bạn nên tìm kiếm ký tự. Và + kể từ nhiều lần cả hai được sử dụng để nhập mã quốc gia hoặc phong cách khác nhau. Một tùy chọn khác mà tôi đã sử dụng trước đây là chỉ cần loại bỏ tất cả các chữ số không và sau đó chỉ cần kiểm tra các chữ số cho độ dài chính xác. Ngoài ra, tôi vui vì bạn đang làm điều này. Có quá khó chịu đối với nhiều trang web hoặc chương trình buộc bạn vào một định dạng cụ thể hay không, khi máy tính có thể dễ dàng kiểm tra! – christophercotton

+0

bản sao có thể có của [Một regex toàn diện để xác thực số điện thoại] (http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) – Mark

Trả lời

4

trận đấu này những gì bạn muốn con số, (,) và -

/^[0-9()-]+$/ 
+0

Cảm ơn! mà làm việc – IamBanksy

+0

Đối với điều này tôi muốn cho phép không gian và dấu hiệu m cũng. như +91 555 555 555. Bạn có thể gợi ý cho tôi điều tốt nhất không. – chandu

+0

Đây gần như là những gì tôi muốn nhưng tôi muốn thực thi nó để kết thúc bằng một số –

1

Tại sao bạn có một hoang ^ trong đó? Tôi nghĩ rằng bạn có nghĩa là [()-] Điều này thực sự làm cho bạn phải có hai đầu-of-strings trong regex, mà sẽ không bao giờ phù hợp.

Ngoài ra, \d là phím tắt đẹp cho [0-9]. Họ đều giống hệt nhau.

Ngoài ra, điều này sẽ chỉ khớp với một loạt các số, sau đó là một bó của ( hoặc ) hoặc -. Một cái gì đó như: 1294819024()()()()()-----()- sẽ khớp. Tôi nghĩ rằng bạn muốn toàn bộ điều để có thể lặp lại, một cái gì đó như: ^(\d*[()-]*)*$. Bây giờ, bạn có thể kết hợp các chuỗi lặp lại này.

Bây giờ, điều quan trọng là phải nhận thấy rằng lồng nhau * thường không hiệu quả, chúng ta có thể nhận ra rằng chúng ta chỉ là muốn để phù hợp với bất kỳ chữ số và dấu chấm câu bạn muốn: [\d()-]*

+0

Sẽ không [^() -] có nghĩa là KHÔNG khớp với các ký tự đó? – christophercotton

+0

Có! Không suy nghĩ thẳng ... –

5
^(\(\d{3}\)|\d{3})-?\d{3}-?\d{4}$ 
  • \(\d{3}\)|\d{3} ba chữ số với hoặc không có () - Regex đơn giản hơn sẽ là \(?\d{3}\)? nhưng điều đó sẽ cho phép (555-5555555555)5555555 v.v.
  • Một tùy chọn - theo sau là ba chữ số
  • Một tùy chọn - Tiếp theo bốn chữ số

Lưu ý rằng điều này vẫn sẽ cho phép 555555-5555555-5555555 - Tôi không biết nếu chúng được bao phủ trong của bạn và vân vân phần

+0

Cảm ơn điều này là chính xác Tôi nghĩ rằng câu hỏi của tôi không phải là phrased đúng cách. Tôi không cần phải chỉ định một độ dài cụ thể trên các con số để cho phép số điện thoại nước ngoài, vv Mặc dù. – IamBanksy

0

Đối với chữ số bạn có thể sử dụng \d. Đối với nhiều hơn một chữ số, bạn có thể sử dụng \d{n}, trong đó n là số chữ số bạn muốn đối sánh. Một số ký tự đặc biệt phải được thoát, ví dụ: \( khớp với (. Ví dụ: \(\d{3}\)\-\d{3}\-\d{4} đối sánh (555) -555-5555.

0

Carat thứ hai (afaik) sẽ phá vỡ mọi thứ bạn làm vì nó có nghĩa là "bắt đầu chuỗi".

gì bạn dường như được yêu cầu do đó là:

  • bắt đầu chuỗi, tiếp theo là ...
  • bất kỳ số lượng ký tự số, tiếp theo là ...
  • bắt đầu chuỗi, tiếp theo ...
  • bất kỳ số lượng '(', ')', hoặc '-' nhân vật, tiếp theo là ...
  • cuối chuỗi

Việc này sẽ không hoạt động ngay cả khi carat thứ hai đó không làm gì cả, bởi vì bạn không tính bất cứ thứ gì sau '' (',') 'hoặc' - 'đầu tiên, và thực tế có thể chỉ xác nhận trống chuỗi nếu đó.

Bạn muốn /^[0-9()-]+$/ cho mẫu rất thô sẽ "hoạt động".

0

Nếu bạn đang sử dụng số US thì giải pháp tốt nhất là loại bỏ tất cả các ký tự không phải chữ số và sau đó kiểm tra xem chiều dài == 10.

Các vấn đề liên quan