diff --git a/src/strings.c b/src/strings.c
index bc0fc5e..f4b83d9 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -853,6 +853,12 @@
 
     rettv->vval.v_number = -1;
 
+    if (in_vim9script()
+	    && (check_for_string_arg(argvars, 0) == FAIL
+		|| check_for_number_arg(argvars, 1) == FAIL
+		|| check_for_opt_bool_arg(argvars, 2) == FAIL))
+	return;
+
     if (argvars[0].v_type != VAR_STRING || argvars[1].v_type != VAR_NUMBER
 	    || (argvars[2].v_type != VAR_UNKNOWN
 					   && argvars[2].v_type != VAR_NUMBER
@@ -948,6 +954,13 @@
     int		what = 0;
     int		isneg;
 
+    if (in_vim9script()
+	    && (check_for_string_arg(argvars, 0) == FAIL
+		|| check_for_opt_number_arg(argvars, 1) == FAIL
+		|| (argvars[1].v_type != VAR_UNKNOWN
+		    && check_for_opt_bool_arg(argvars, 2) == FAIL)))
+	return;
+
     if (argvars[1].v_type != VAR_UNKNOWN)
     {
 	base = (int)tv_get_number(&argvars[1]);
@@ -1031,6 +1044,12 @@
     char_u	*pos;
     int		start_idx;
 
+    if (in_vim9script()
+	    && (check_for_string_arg(argvars, 0) == FAIL
+		|| check_for_string_arg(argvars, 1) == FAIL
+		|| check_for_opt_number_arg(argvars, 2) == FAIL))
+	return;
+
     needle = tv_get_string_chk(&argvars[1]);
     save_haystack = haystack = tv_get_string_buf_chk(&argvars[0], buf);
     rettv->vval.v_number = -1;
@@ -1076,6 +1095,10 @@
     void
 f_strlen(typval_T *argvars, typval_T *rettv)
 {
+    if (in_vim9script()
+	    && check_for_string_or_number_arg(argvars, 0) == FAIL)
+	return;
+
     rettv->vval.v_number = (varnumber_T)(STRLEN(
 					      tv_get_string(&argvars[0])));
 }
@@ -1102,6 +1125,10 @@
     void
 f_strcharlen(typval_T *argvars, typval_T *rettv)
 {
+    if (in_vim9script()
+	    && check_for_string_or_number_arg(argvars, 0) == FAIL)
+	return;
+
     strchar_common(argvars, rettv, TRUE);
 }
 
@@ -1155,8 +1182,12 @@
     void
 f_strwidth(typval_T *argvars, typval_T *rettv)
 {
-    char_u	*s = tv_get_string_strict(&argvars[0]);
+    char_u	*s;
 
+    if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
+	return;
+
+    s = tv_get_string_strict(&argvars[0]);
     rettv->vval.v_number = (varnumber_T)(mb_string2cells(s, -1));
 }
 
@@ -1326,6 +1357,12 @@
     char_u	*lastmatch = NULL;
     int		haystack_len, end_idx;
 
+    if (in_vim9script()
+	    && (check_for_string_arg(argvars, 0) == FAIL
+		|| check_for_string_arg(argvars, 1) == FAIL
+		|| check_for_opt_number_arg(argvars, 2) == FAIL))
+	return;
+
     needle = tv_get_string_chk(&argvars[1]);
     haystack = tv_get_string_buf_chk(&argvars[0], buf);
 
@@ -1372,6 +1409,9 @@
     void
 f_strtrans(typval_T *argvars, typval_T *rettv)
 {
+    if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
+	return;
+
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = transstr(tv_get_string(&argvars[0]));
 }
@@ -1382,6 +1422,9 @@
     void
 f_tolower(typval_T *argvars, typval_T *rettv)
 {
+    if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
+	return;
+
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = strlow_save(tv_get_string(&argvars[0]));
 }
@@ -1392,6 +1435,9 @@
     void
 f_toupper(typval_T *argvars, typval_T *rettv)
 {
+    if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
+	return;
+
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = strup_save(tv_get_string(&argvars[0]));
 }
@@ -1417,6 +1463,12 @@
     char_u	buf2[NUMBUFLEN];
     garray_T	ga;
 
+    if (in_vim9script()
+	    && (check_for_string_arg(argvars, 0) == FAIL
+		|| check_for_string_arg(argvars, 1) == FAIL
+		|| check_for_string_arg(argvars, 2) == FAIL))
+	return;
+
     in_str = tv_get_string(&argvars[0]);
     fromstr = tv_get_string_buf_chk(&argvars[1], buf);
     tostr = tv_get_string_buf_chk(&argvars[2], buf2);
@@ -1517,7 +1569,7 @@
 {
     char_u	buf1[NUMBUFLEN];
     char_u	buf2[NUMBUFLEN];
-    char_u	*head = tv_get_string_buf_chk(&argvars[0], buf1);
+    char_u	*head;
     char_u	*mask = NULL;
     char_u	*tail;
     char_u	*prev;
@@ -1527,6 +1579,15 @@
 
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = NULL;
+
+    if (in_vim9script()
+	    && (check_for_string_arg(argvars, 0) == FAIL
+		|| check_for_opt_string_arg(argvars, 1) == FAIL
+		|| (argvars[1].v_type != VAR_UNKNOWN
+		    && check_for_opt_number_arg(argvars, 2) == FAIL)))
+	return;
+
+    head = tv_get_string_buf_chk(&argvars[0], buf1);
     if (head == NULL)
 	return;
 
