Chcę zastąpić kropki w ciągu znaków za pomocą% 20 dla celów klucza Firebase. mogę zrobić 1 okres w czasie z:Jak zamienić wszystkie kropki w łańcuchu w JavaScript bez/g?
string.replace('.', '%20')
mogę zrobić nawet wszystkie z nich z flagą /g
regex:
string.replace(/\./g, '%20')
Ale Firebase reguły wyskakuje mi błąd:
Error saving rules - Line 5: regular expressions do not support flags other than i
Potrzebuję więc wyrażenia, które zastępuje wszystkie okresy bez użycia /g
. Mogłem tylko łańcuch .replace('.', '%20')
kilka razy:
string.replace('.', '%20').replace('.', '%20').replace('.', '%20').replace('.', '%20')
Ale mam nadzieję, że to lepszy sposób.
UPDATE: Próbowałem string.split('.').join('%20')
, ale Firebase wyrzuca błąd:
Type error: Function call on target that is not a function.
myślę, że wyjął funkcję split
w swoich przepisach parsera JSON.
UPDATE 2: Próbowałem również (function() {var s = auth.token.email; while (s.indexOf('.') != -1) { s = s.replace('.', '%20') } return s})()
. Firebase skarżyło się, że definicje funkcji nie są dozwolone w ich regułach bazy danych.
UPDATE 3: Dzięki wspaniałej wsparcia Firebase jest, dowiedziałem się, że funkcja w swoich przepisach bazodanowych string.replace
został zastąpiony z wersją, która zastępuje wszystkie wystąpienia podciągu, a nie tylko pojedyncze wystąpienie. Tak naprawdę string.replace('.', %2E')
działa idealnie!
Jedyne odniesienie, które znalazłem, to [sprawa Githuba] (https://github.com/firebase/bolt/issues/176) ... – Xufox
Tak @Xufox to problem, z którym mam do czynienia –
Jeśli planujesz używać adresów e-mail jako kluczy, istnieje wiele lepszych opcji strukturyzacji danych, aby można było całkowicie uniknąć tego bałaganu. Tylko mówię'. – Jay