Kiểm tra biểu thức chính quy bằng chữ và số, dấu gạch ngang và gạch dưới nhưng không có dấu cách


92

Đang cố gắng kiểm tra đầu vào so với một biểu thức chính quy.

Trường chỉ nên cho phép các ký tự chữ và số, dấu gạch ngang và dấu gạch dưới và KHÔNG được cho phép khoảng trắng.

Tuy nhiên, đoạn mã dưới đây cho phép khoảng trắng.

Tôi đang thiếu gì?

var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }

5
Tôi thích câu trả lời của Andy E dưới đây. Ngoài ra, bạn có thể muốn kiểm tra gskinner.com/RegExr để chỉnh sửa regex nhanh chóng. Nó ... khá ngọt ngào.
pixelbobby

Câu trả lời:


155

Tuy nhiên, đoạn mã dưới đây cho phép khoảng trắng.

Không, nó không. Tuy nhiên, nó sẽ chỉ khớp với đầu vào có độ dài bằng 1. Đối với đầu vào có độ dài lớn hơn hoặc bằng 1, bạn cần có +lớp ký tự sau:

var regexp = /^[a-zA-Z0-9-_]+$/;
var check = "checkme";
if (check.search(regexp) === -1)
    { alert('invalid'); }
else
    { alert('valid'); }

Lưu ý rằng không -(trong trường hợp này) và không _cần thoát.


16

Bạn không nên sử dụng String.match nhưng RegExp.prototype.test (tức là /abc/.test("abcd")) thay vì String.search () nếu bạn chỉ quan tâm đến giá trị boolean. Bạn cũng cần lặp lại lớp nhân vật của mình như được giải thích trong câu trả lời của Andy E:

var regexp = /^[a-zA-Z0-9-_]+$/;

8
Trên thực tế, bạn nên sử dụng RegExp.prototype.testphương pháp này nếu bạn chỉ quan tâm đến boolean.
Andy E

7

Cú pháp này ngắn gọn hơn một chút so với các câu trả lời đã được đăng cho đến thời điểm này và đạt được kết quả tương tự:

let regex = /^[\w-]+$/;

1
Cân nhắc thêm một ghi chú rằng câu trả lời của bạn cũng hoạt động cho các ký tự quốc tế. Tôi không chắc về JavaScript, nhưng trong bash, điều này hoạt động: ʻecho "abc-def däf_ghi" | egrep -wo '(\ w | - | _) +'
Ivan Ogai,

4

Có lỗi ngu ngốc. Vì vậy, hãy đăng ở đây, nếu ai thấy nó hữu ích

  1. -\._ - có nghĩa là gạch nối, dấu chấm và dấu gạch dưới
  2. \.-_ - có nghĩa là tất cả các dấu hiệu trong phạm vi từ dấu chấm đến dấu gạch dưới

# 2 chỉ áp dụng nếu nó nằm trong dấu ngoặc vuông, tức là [\.-_] Là một ký tự trong phạm vi từ dấu chấm đến dấu gạch dưới. Nhưng nếu không có dấu ngoặc vuông thì cả hai đều là một chuỗi ba ký hiệu và chúng chỉ khác nhau về thứ tự.
erict

1

Đừng thoát khỏi gạch dưới. Có thể gây ra một số vấn đề.


1
tại sao bạn nói như vậy? Tôi biết dấu gạch dưới không cần phải thoát, nhưng tôi chưa bao giờ nghe nói về việc \_gây ra sự cố, trong JavaScript hoặc bất kỳ hương vị regex nào khác.
Alan Moore

1
Suy đoán thuần túy. Mặt khác, biểu thức trông ổn và không nên khớp với khoảng trắng trong mọi trường hợp, nhưng tôi chỉ ném nó ra khỏi đó. Có lẽ nên là một bình luận không phải là một câu trả lời.
David Fells


0

hãy thử cái này, nó đang hoạt động tốt cho tôi.

"^([a-zA-Z])[a-zA-Z0-9-_]*$"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.