質問: URLが ``` // http://wonderland.com/street/愛媛県 app.get(/^\/street\/.{1,50}$/) console.log(req.params[0]) // 愛媛県 // パスが通る ``` となる場合はOKですが、 下記のようにもし`/id/数値`が入っていても処理するにはどうすればよいでしょうか? ``` // http://wonderland.com/street/Улаанбаатар/id/1230515654 app.get(/^\/street\/(.{1,50}$)(\/id\/([0-9]{1,3}$))?$/) console.log(req.params[0]) // Улаанбаатар/id/1230515654 // 4桁以上でもパスが通ってしまう ``` やりたいことは ``` /street/(記号以外の日本語や英語、数字、外国語50文字以内) /street/(記号以外の日本語や英語、数字、外国語50文字以内)/id/(数字3桁) ``` です。なるべくセキュアにしたいのですがstreetのあとの文字列は\w{1,50}では都合がわるかったのでドットを使用しました。 > > `\w` > > 単語に使用される任意の文字と一致します。アンダースコアも含まれます。'[A-Za-z0-9_]' と同じ意味になります。 > > > `.` > > "\n" を除く任意の 1 文字に一致します。'\n' など、任意の文字と一致するには、'[.\n]' などのパターンを指定します。 > > > また、正規表現を使うとややこしうなるので`req.params.name :name`などは使用しておりません。
回答: ※ コメント欄からの転記になります(一部文言を変更) セパレータが `/` ですので、 ``` /^\/street\/([^/]{1,50})(\/id\/([0-9]{1,3}))?$/ ``` としてみてはどうでしょう。