diff --git a/src/parser.pegjs b/src/parser.pegjs
index eef222ce5d2776009e6bf4b132775192fc8111cd..555ec654bbf5c77547d57868b5eed90c5534c538 100644
--- a/src/parser.pegjs
+++ b/src/parser.pegjs
@@ -371,7 +371,7 @@ fnArgs
 }
 
 fnArg
-	= k:$([a-z0-9_]i)+ "=" v:$([a-z0-9_]i)+
+	= k:$([a-z0-9_]i)+ "=" v:$([a-z0-9_.]i)+
 {
 	return { k, v };
 }
diff --git a/test/parser.ts b/test/parser.ts
index c889ec54adc8dc4fe9b565a2292c61fba329da1e..fc29f1a7ebd3851382e6a005fa05b9ffde0365ca 100644
--- a/test/parser.ts
+++ b/test/parser.ts
@@ -474,6 +474,16 @@ describe('parser', () => {
 			];
 			assert.deepStrictEqual(mfm.parse(input), output);
 		});
+
+		it('with a string argument', () => {
+			const input = '[spin.speed=1.1s a]';
+			const output = [
+				FN('spin', { speed: '1.1s' }, [
+					TEXT('a')
+				])
+			];
+			assert.deepStrictEqual(mfm.parse(input), output);
+		});
 	});
 
 	it('composite', () => {