2013-07-04 34 views
6

Người dùng có thể điền số điện thoại. (Chỉ chữ số và dấu gạch ngang, dấu gạch ngang không bắt buộc)Regex cho số lượng giới hạn, dấu gạch ngang giữa không giới hạn?

Ông có thể có càng nhiều (giữa) dấu gạch ngang (-) nhưng tổng số các chữ số phải được 10

I've managed viết một regex sử dụng lookahead tích cực của "-" với số lượng:

^(?=.*\-)[0-9\-]+$

Nhưng tôi có 2 vấn đề với điều đó:

  • dấu gạch ngang (trong regex của tôi) cũng có thể ở đầu và cuối và đó là không hợp lệ.

  • Tôi đã không áp dụng thành công giới hạn 10 chữ số.

p.s. ví dụ về ví dụ hợp lệ:

050-6783828 050-678-38-28 0506783828

không hợp lệ:

-0506783826 0506783826- 050678--3826

p.s.2 xin vui lòng chú ý t câu hỏi của anh ta được gắn thẻ là regex. Tôi không tìm kiếm các giải pháp js (non-regex).

+0

Cách tiếp cận RegExp của tôi sẽ đơn giản .replace (/ -/g, ") –

+0

@AlexK. yup. nhưng đôi khi bạn muốn có thêm kiến ​​thức về một chủ đề nhất định ... (rgx) –

Trả lời

8

Tôi nghĩ rằng bạn muốn một cái gì đó như thế này:

^\d(?:-?\d){9}$ 
  • Bắt đầu bằng một chữ số.
  • 9 lần: dấu gạch ngang tùy chọn và một chữ số khác.

dụ làm việc: http://rubular.com/r/CrgTOrXC8E

+0

Đối với tôi, phần khó chịu nhất là tôi đã mong đợi một người nhìn tích cực, và không tìm thấy nó trong ví dụ làm việc của bạn ..... làm cho tôi cảm thấy thực sự ngu ngốc. –

+1

Xin lỗi vì thất vọng ':)' Looakeads là * rất * phổ biến trong các mẫu này mặc dù - nếu bạn muốn thêm một yêu cầu khác, điều đó có lẽ sẽ cần một lookahead. – Kobi

2
^[0-9](-?[0-9]){8}-?[0-9]$ 

Một chữ số tại bắt đầu và kết thúc, 8 nhóm dash tùy chọn và chữ số, cộng với dấu gạch ngang tùy chọn trước chữ số cuối cùng

Chỉ có một dấu gạch ngang được phép giữa eatch chữ số lân cận.

var pat = new RegExp('^[0-9](-?[0-9]){8}-?[0-9]$') 
// correct 
console.log(pat.test('0506783828')) 
console.log(pat.test('0-5-0-6-7-8-3-8-2-8')) 
// incorrect 
console.log(pat.test('0506783828-')) 
console.log(pat.test('-0506783828')) 
console.log(pat.test('05--06783828')) 
+0

Đang hoạt động. Cảm ơn nhiều. –

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