2016-12-12 16 views
5

Tôi muốn thay thế các khoảng thời gian trong chuỗi bằng% 20 cho mục đích khóa Firebase. Tôi có thể làm 1 thời gian tại một thời điểm với:Làm thế nào để thay thế tất cả các giai đoạn trong một chuỗi trong JavaScript mà không có/g?

string.replace('.', '%20') 

tôi thậm chí có thể làm tất cả trong số họ với một lá cờ /g regex:

string.replace(/\./g, '%20') 

Nhưng căn cứ hỏa lực quy tắc mang lại cho tôi một lỗi:

Error saving rules - Line 5: regular expressions do not support flags other than i

Vì vậy, tôi cần một biểu thức thay thế tất cả các khoảng thời gian mà không sử dụng /g. Tôi chỉ có thể chuỗi .replace('.', '%20') một loạt thời gian:

string.replace('.', '%20').replace('.', '%20').replace('.', '%20').replace('.', '%20') 

Nhưng tôi hy vọng có cách tốt hơn.

CẬP NHẬT: Tôi đã cố gắng string.split('.').join('%20'), nhưng căn cứ hỏa lực ném lỗi:

Type error: Function call on target that is not a function.

Tôi đoán họ lấy ra split chức năng trong phân tích cú pháp quy định JSON của họ.

CẬP NHẬT 2: Tôi cũng đã thử (function() {var s = auth.token.email; while (s.indexOf('.') != -1) { s = s.replace('.', '%20') } return s})(). Firebase phàn nàn rằng các định nghĩa chức năng không được phép trong các quy tắc cơ sở dữ liệu của chúng.

CẬP NHẬT 3: Nhờ hỗ trợ tuyệt vời căn cứ hỏa lực, tôi phát hiện ra rằng string.replace chức năng trong các quy tắc cơ sở dữ liệu của họ đã được thay với một phiên bản thay thế tất cả lần xuất hiện của chuỗi con, không chỉ là một lần xuất hiện. Vì vậy, thực sự string.replace('.', %2E') hoạt động hoàn hảo!

+0

Tham chiếu duy nhất tôi tìm thấy là [Vấn đề Github] (https://github.com/firebase/bolt/issues/176)… – Xufox

+0

Có @Xufox đó là vấn đề tôi đang xử lý với –

+0

Nếu bạn đang có kế hoạch sử dụng địa chỉ email làm chìa khóa, có các tùy chọn WAY tốt hơn để cấu trúc dữ liệu của bạn để tránh lộn xộn này hoàn toàn. Chỉ cần nói. – Jay

Trả lời

9

Bạn chỉ có thể chia nhỏ và tham gia nó một lần nữa string.split('.').join('%20')

+1

Plus1 để tiết kiệm cho tôi phải nhập chính xác điều tương tự: D – Archer

+1

Điều đó thật thanh lịch! Suy nghĩ đầu tiên của tôi là một vòng lặp 'while' với' (/\./). Kiểm tra (chuỗi) 'hoặc một cái gì đó tương tự như điều kiện. – Xufox

+0

Chỉ đăng một bản cập nhật mà tôi đã thử điều này nhưng Firebase cho tôi một lỗi. Đó là một câu trả lời tốt cho câu hỏi của tôi mặc dù. –

0

Kể từ khi căn cứ hỏa lực là phàn nàn khi bạn cũng thử câu trả lời rõ ràng là tốt hơn về phân chia sau đó tham gia, hãy thử này ...

var s = "this.is.a.string.value"; 
 

 
while (s.indexOf(".") != -1) { 
 
    s = s.replace(".", "%20"); 
 
} 
 

 
console.log(s);

+0

Tôi có thể thử gói như một biểu thức hoặc một IIFE –

+0

Vâng, bạn biết bối cảnh để bạn có thể quyết định cách tốt nhất để sử dụng nó. Nếu bạn có thể thử nghiệm các hàm nguyên mẫu trong Firebase thì đó có thể là một giải pháp, nếu bạn cần nhiều hơn một lần. – Archer

+0

Thật không may Firebase cho một lỗi rằng định nghĩa chức năng không được phép trong các quy tắc cơ sở dữ liệu: ( –

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