diff --git a/funcs/func_strings.c b/funcs/func_strings.c
index 303ca77d76fde9107978ae893494a47d38c2888d..dced1e1a6559b2922eee27cc4c949fb6df034c76 100755
--- a/funcs/func_strings.c
+++ b/funcs/func_strings.c
@@ -69,39 +69,43 @@ struct ast_custom_function fieldqty_function = {
 
 static char *builtin_function_regex(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) 
 {
-	char *ret_true = "1", *ret_false = "0", *ret;
 	char *arg, *earg, *tmp, errstr[256] = "";
 	int errcode;
 	regex_t regexbuf;
 
-	ret = ret_false; /* convince me otherwise */
+	ast_copy_string(buf, "0", len);
+	
 	tmp = ast_strdupa(data);
-	if (tmp) {
-		/* Regex in quotes */
-		arg = strchr(tmp, '"');
-		if (arg) {
-			arg++;
-			earg = strrchr(arg, '"');
-			if (earg) {
-				*earg = '\0';
-			}
-		} else {
-			arg = tmp;
-		}
+	if (!tmp) {
+		ast_log(LOG_ERROR, "Out of memory in %s(%s)\n", cmd, data);
+		return buf;
+	}
 
-		if ((errcode = regcomp(&regexbuf, arg, REG_EXTENDED | REG_NOSUB))) {
-			regerror(errcode, &regexbuf, errstr, sizeof(errstr));
-			ast_log(LOG_WARNING, "Malformed input %s(%s): %s\n", cmd, data, errstr);
-			ret = NULL;
-		} else {
-			ret = regexec(&regexbuf, data, 0, NULL, 0) ? ret_false : ret_true;
+	/* Regex in quotes */
+	arg = strchr(tmp, '"');
+	if (arg) {
+		arg++;
+		earg = strrchr(arg, '"');
+		if (earg) {
+			*earg++ = '\0';
+			/* Skip over any spaces before the data we are checking */
+			while (*earg == ' ')
+				earg++;
 		}
-		regfree(&regexbuf);
 	} else {
-		ast_log(LOG_ERROR, "Out of memory in %s(%s)\n", cmd, data);
+		arg = tmp;
+	}
+
+	if ((errcode = regcomp(&regexbuf, arg, REG_EXTENDED | REG_NOSUB))) {
+		regerror(errcode, &regexbuf, errstr, sizeof(errstr));
+		ast_log(LOG_WARNING, "Malformed input %s(%s): %s\n", cmd, data, errstr);
+	} else {
+		if (!regexec(&regexbuf, earg ? earg : "", 0, NULL, 0))
+			ast_copy_string(buf, "1", len); 
 	}
+	regfree(&regexbuf);
 
-	return ret;
+	return buf;
 }
 
 #ifndef BUILTIN_FUNC