2009-06-23 16 views
5

Làm cách nào để tạo biểu thức chính quy để chấp nhận không quá 10 chữ số?Làm cách nào để tạo biểu thức chính quy để chấp nhận không quá 10 chữ số?

nhờ

+9

(-1) KHÔNG có dấu hiệu cho thấy bạn đã thực hiện * bất kỳ * nỗ lực nào để tự giải quyết vấn đề này. – DevinB

+1

Tiêu đề "không quá 10 chữ số" khác với câu hỏi "ít hơn mười chữ số" - đó là gì? :) –

+0

10 có được bao gồm hoặc loại trừ không? Tiêu đề cho biết bao gồm, nhưng mô tả chỉ ra bị loại trừ. – Joseph

Trả lời

5

/\D\d{0,10}\D/ (giả sử "ít hơn" bao gồm 0)

/\D\d{1,10}\D/ (nếu bạn muốn 1-10 chữ số)

+0

Đó là chính xác 10 chữ số chỉ – Hugoware

+0

Đã chỉnh sửa cho phù hợp, cảm ơn! –

+0

Jeremy vui lòng giải thích cách regex của bạn hoạt động như thế nào –

2

Trong Perl:

^\d{,9}$ 

perldoc perlretut là một hướng dẫn tốt đẹp về các biểu thức chính quy trong Perl.

6
^\d{1,9}$ 

Điều đó sẽ phù hợp với bất cứ điều gì từ 1 chữ số để 9.

Vì bạn không nói rõ hương vị regex bạn đang làm việc với, mà nên đưa bạn đến nơi bạn cần phải. Nếu không, hãy cho chúng tôi biết bạn đang sử dụng công nghệ regex nào.

+1

về mặt kỹ thuật, không quá 10 bao gồm 10, phải không? – seanmonstar

2

Tôi nghĩ rằng điều này sẽ làm các trick:

^\ d {1,10} $

+0

Anh ấy muốn LESS hơn 10 chữ số. – Zanoni

+0

Lưu ý rằng cũng sẽ khớp với chuỗi rỗng, không giống như \ d {0,10}. Bởi chính nó, regex này có thể có vấn đề (kể từ khi chuỗi rỗng nằm ở khắp mọi nơi trong một chuỗi). Nếu chuỗi chữ số là tùy chọn và đây là một phần của một regex lớn hơn, nó sẽ là những gì bạn muốn. – Brian

+0

Đúng: \ d {, 9} – Zanoni

0

cho "ít hơn 10" và ít nhất 1 bạn muốn, giả định đó là giá trị duy nhất ...

^\d{1,9}$ 
1

/\ D \ d {, 9} \ D/trong Perl

0

này sẽ tìm thấy ít nhất một và không quá 9 chữ số liên tiếp:

\d{1,9}

21

Vì bạn đã hỏi "làm thế nào", tôi sẽ cố gắng giải thích từng bước. Bởi vì bạn không chỉ định hương vị regexp nào bạn đang sử dụng nên tôi sẽ cung cấp các ví dụ trong PCREtwo POSIX regexp variants.

Đối với đơn giản trường hợp như thế này, bạn nên nghĩ cụm từ thông dụng về tự động hóa, chấp nhận một ký tự cùng một lúc và nói bất cứ khi nào nó hợp lệ (chấp nhận ký tự) hay không. Và sau mỗi ký tự bạn có thể xác định lượng bao nhiêu lần nó có thể xuất hiện, giống như (trong phương ngữ PCRE) * (zero hoặc nhiều lần), + (một hoặc nhiều thời gian hơn) hoặc {n,m} (từ n đến m lần). Sau đó, quá trình thi công trở nên đơn giản:

PRCE | B.POSIX | E.POSIX | Comments 
------+---------+-----------+-------------------------------------------------- 
^  |^  |^  | Unless you are going to accept anything with 10 
     |   |   | digits in it, you need to match start of data; 
\d | [0-9] | [:digit:] | You need to match digits; 
{1,10}| \{1,10\}| {1,10} | You have to specify there is from 1 to 10 of them. 
     |   |   | If you also wish to accept empty string — use 0; 
$  | $  | $   | Then, data should end (unless see above). 

Vì vậy, kết quả là ^\d{1,10}$, ^[0-9]\{1,10}\$ hoặc ^[:digit:]{1,10}$ tương ứng.

+0

+1 câu trả lời hay. Tôi sắp bình luận về các hương vị regex khác nhau. – Kev

+0

+1 để giải thích. –

0

http://www.regexbuddy.com/

nhưng tôi muốn đề nghị chia những lo ngại ở đây, chỉ cần kiểm tra xem độ dài của chuỗi là < = 10 ký tự sau đầu vào, bạn không cần regex để làm điều đó.

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