2011-12-16 14 views
7

Tôi không phải là chuyên gia có regex nhưng đã thử dùng một trường cho phép dữ liệu chữ và số có dấu cách nhưng không phải bất kỳ ký tự đặc biệt nào khác. Nơi linkTitle là tên của biến để kiểm tra tôi đã cố gắng với regex sau đây trong tôi có điều kiệnjavascript regex để xác thực văn bản chữ và số với dấu cách và từ chối các ký tự đặc biệt

/[^A-Za-z\d\s]/.test(linkTitle) 
/[^A-Za-z0-9\s]/.test(linkTitle) 
/[^A-Za-z\d ]/.test(linkTitle) 

và không ai trong số những hoạt động ... Tôi tò mò muốn biết những gì đã xảy ra với regex sử dụng \ s mà dường như đề cập đến khoảng trắng và những gì sẽ là regex apt để phù hợp với hóa đơn.

Cảm ơn trước !!

+0

Khi bạn nói 'spaces' làm bạn có nghĩa là' ' ''ký tự, hoặc làm bạn có nghĩa là bao gồm tất cả các ký tự không gian khác như'' \ f', '\ t'' etc? – zzzzBov

+0

Điều kiện vượt qua của bạn là gì? viết một bài kiểm tra đơn vị đơn giản. – zzzzBov

+0

giả sử rằng bất kỳ khoảng trống nào giống như \ t \ v \ f đều có thể chấp nhận cho đầu vào – optimusprime619

Trả lời

17

Tôi nghĩ rằng bạn muốn khớp đầu chuỗi một lần, sau đó sử dụng Dấu đóng tích — một hoặc nhiều chữ cái, dấu cách hoặc chữ số, sau đó kết thúc chuỗi.

/^[A-Za-z\d\s]+$/.test(linkTitle) 

Thử nghiệm với:

var reg = /^[A-Za-z\d\s]+$/; 
["Adam", "Ada m", "A1dam", "A!dam", 'sdasd 213123&*&*&'].forEach(function (str) { 
    console.log(reg.test(str + "\n")); 
}); 

Hiển true, true, true, false, false


Hoặc nếu bạn muốn cho phép chuỗi rỗng, bạn có thể sử dụng RegEx tương tự nhưng với Kleene Closure — số không hoặc nhiều hơn — của các chữ cái, chữ số hoặc dấu cách

var regAllowEmpty = /^[A-Za-z\d\s]*$/; 
["", "Adam", "Ada m", "A1dam", "A!dam", 'sdasd 213123&*&*&'].forEach(function (str) { 
    console.log(regAllowEmpty.test(str + "\n")); 
}); 

lưu ý rằng forEach sẽ không hoạt động trên các trình duyệt cũ - đây là chỉ để thử nghiệm

+0

Điều này sẽ trả về true cho bất kỳ đầu vào nào. Hãy thử một hoặc nhiều thay vì – hugomg

+0

@missingno - Tôi đã đập đầu vào tường thử nghiệm này cố gắng tìm ra những gì đã sai - cảm ơn bạn! –

+0

OP regex sẽ phù hợp với bất kỳ sai đơn char –

1

Bất kỳ ba regex của bạn ở đây sẽ phù hợp với bất kỳ ký tự duy nhất đó là không một giữa [] trừ ^ tất nhiên .

Sự cố có thể xuất phát từ cách bạn diễn giải kết quả được cung cấp bởi test(). Ở đây nếu regex khớp với chuỗi linkTitletest trả về true; điều này có nghĩa là bạn có một sai char trong đầu vào (không phải là một chữ hoa, cũng không phải trong trường hợp thấp hơn, không phải là một chữ số và không phải là một không gian).

đã kiểm tra regexs của bạn:

/[^A-Za-z\d\s]/.test('0 '); // no match, false, input is ok 
/[^A-Za-z\d\s]/.test('0 $'); // match, true, input is wrong 
+0

đánh giá cao phản hồi nhưng tôi hiểu toán tử NOT và rõ ràng với hành động có điều kiện của tôi dựa trên nó .. – optimusprime619

+0

ok, nhưng có gì sai với ví dụ của bạn. Bạn không muốn phát hiện bất kỳ char sai trong đầu vào? Tất cả ba regex hành xử theo cùng một cách, và họ làm việc. –

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