Javascript Regex để Giới hạn số ký tự trên mỗi dòng

Aug 26 2020

Tôi đang cố tạo Biểu thức chính quy JS để giới hạn số lượng ký tự trên mỗi dòng trong vùng văn bản html. Lý tưởng nhất là tôi muốn có nó dưới dạng Javascript Regex vì nó dễ sử dụng hơn cho công cụ xác thực biểu mẫu của chúng tôi.

Tôi muốn tạo một biểu thức chính quy xác thực rằng một chuỗi có 10 ký tự trên mỗi dòng và tối đa 3 dòng

Ý tưởng sẽ là xác thực các chuỗi như sau:

01234567890
a
b

Dòng đầu tiên ở đây có 11 ký tự nên toàn bộ chuỗi sẽ bị từ chối /

a
b
c
d

Văn bản này có 4 dòng nên cũng nên bác bỏ.

Tôi đã thử với regex sau nhưng không hoạt động như mong đợi:

^((?:\n)?[^\n]{0,10}){0,3}$

bất kỳ manh mối về những gì tôi đang làm sai?

Trả lời

1 WiktorStribiżew Aug 26 2020 at 19:32

Bạn có thể dùng

^.{0,10}(?:\r?\n.{0,10}){0,2}$

Xem bản demo regex

Chi tiết

  • ^ - bắt đầu của chuỗi
  • .{0,10} - không đến mười ký tự khác với ký tự ngắt dòng
  • (?:\r?\n.{0,10}){0,2} - không, một hoặc hai lần xuất hiện
    • \r?\n - Kết thúc dòng CRLF hoặc LF
    • .{0,10} - không đến mười ký tự khác với ký tự ngắt dòng
  • $ - cuối chuỗi.

JavaScript:

const valid_rx = /^.{0,10}(?:\r?\n.{0,10}){0,2}$/;
const testFunc = () => {
    if(!valid_rx.test(document.all.mytextarea.value))
    {
        console.log("Please use correct format.");
        return false;
    }
}
<textarea id="mytextarea" cols="50" rows="10">a
b
c
</textarea>
<button onclick="testFunc()">Click Me</button>