diff --git a/modules/packages/npm/creator.go b/modules/packages/npm/creator.go
index 5e7e0e29833..9e636757aff 100644
--- a/modules/packages/npm/creator.go
+++ b/modules/packages/npm/creator.go
@@ -34,7 +34,7 @@ var (
 	ErrInvalidIntegrity = util.NewInvalidArgumentErrorf("failed to validate integrity")
 )
 
-var nameMatch = regexp.MustCompile(`\A((@[^\s\/~'!\(\)\*]+?)[\/])?([^_.][^\s\/~'!\(\)\*]+)\z`)
+var nameMatch = regexp.MustCompile(`^(@[a-z0-9-][a-z0-9-._]*/)?[a-z0-9-][a-z0-9-._]*$`)
 
 // Package represents a npm package
 type Package struct {
diff --git a/modules/packages/npm/creator_test.go b/modules/packages/npm/creator_test.go
index 168f950038d..806377a52bc 100644
--- a/modules/packages/npm/creator_test.go
+++ b/modules/packages/npm/creator_test.go
@@ -67,6 +67,17 @@ func TestParsePackage(t *testing.T) {
 		test(t, " test")
 		test(t, "test ")
 		test(t, "te st")
+		test(t, "Test")
+		test(t, "_test")
+		test(t, ".test")
+		test(t, "^test")
+		test(t, "te^st")
+		test(t, "te|st")
+		test(t, "te)(st")
+		test(t, "te'st")
+		test(t, "te!st")
+		test(t, "te*st")
+		test(t, "te~st")
 		test(t, "invalid/scope")
 		test(t, "@invalid/_name")
 		test(t, "@invalid/.name")
@@ -93,6 +104,13 @@ func TestParsePackage(t *testing.T) {
 
 		test(t, "test")
 		test(t, "@scope/name")
+		test(t, "@scope/q")
+		test(t, "q")
+		test(t, "@scope/package-name")
+		test(t, "@scope/package.name")
+		test(t, "@scope/package_name")
+		test(t, "123name")
+		test(t, "----")
 		test(t, packageFullName)
 	})