title: Matches decorator of class-validator does not work correctly
body: <p>I'm learning nestjs as my job requirement</p>
  <p>here is my regex: <code>/(?=[^\d].*)^[\w]{4,}$/</code> which means the first character must not be a number, at least 4 characters for the whole string</p>
  <p>here the DTO:</p>
  <pre class="lang-js prettyprint-override"><code>import { IsString, IsPhoneNumber, Matches } from 'class-validator';
  export class CreateUserDto {
    @Matches(/(?=[^\d].*)^[\w]{4,}$/, {
      message:
        'the first character of the username must not be a number. Username must contains at least 4 characters',
    })
    username: string;
  
    @IsString()
    password: string;
  
    @IsPhoneNumber('VN')
    phoneNumber: string;
  }
  
  </code></pre>
  <p>whatever the username in the request body is, it still passed, even an empty string
  but when I post a plain number for the username field, the server responded an error as default action of the Matches decorator</p>
  <pre class="lang-json prettyprint-override"><code>{
      &quot;statusCode&quot;: 400,
      &quot;message&quot;: [
          &quot;username must be a string&quot;
      ],
      &quot;error&quot;: &quot;Bad Request&quot;
  }
  </code></pre>
  <p>I have also enabled Validation in main.ts</p>
  <pre class="lang-js prettyprint-override"><code>async function bootstrap() {
    const app = await NestFactory.create(AppModule);
    app.enableCors();
    app.useGlobalPipes(new ValidationPipe());
    await app.listen(9000);
  }
  bootstrap();
  </code></pre>
  <p>could anyone explain for me? thanks for your help</p>