urlに任意の文字が含まれているかどうかを確認する
April 12, 2021
ヘッダーにあるボタンの遷移先を URL によって変えたいことがあります。
こんな感じで書けます。Rails のお話です。
URL に/hoge か /hoge/があれば処理を変えたいのです。
- if request.path.match(/\/hoge(\/)?/)
= render "shared/hoge"
- else
= render "shared/home"
正規表現を使って処理を分岐させているわけです。
/スラッシュで囲んで書くと正規表現オブジェクトになります。
match(/\/hoge(\/)?/)
ここの部分で URL に/hoge が含まれているかを判定しています。
・\ は直後の正規表現記号をエスケープする。これないと //hoge ってなって、最初のふたつ目の/までを正規表現オブジェクトとしてしまう。
・(\/)はおなじく/を正規表現オブジェクトの終わりとしないため
・?は /hoge/を(たぶん)ひとまとまりとした文字が 0 個か 1 個のときにヒットする、、、あれ、、、0個じゃだめじゃね。いいのかな。よくないな
- if request.path.match(/\/hoge(\/)+?/)
= render "shared/hoge"
- else
= render "shared/home"
こっちが正解かな。
いや+は必要ない。
?は /hoge/を(たぶん)ひとまとまりとした文字が 0 個か 1 個のときにヒットする
この認識が間違ってますね。
(\/)?
これはあくまで / の一文字が 0 個か 1 個の場合にマッチする。
つまり、、、
request.path.match(/\/hoge(\/)?/)
これは /hoge または /hoge/ が含まれてればマッチするということですね。
結局のところ、下記で OK ですね。
- if request.path.match(/\/hoge(\/)?/)
= render "shared/hoge"
- else
= render "shared/home"
参考文献
[https://murashun.jp/article/programming/regular-expression.html:embed:cite]
[https://userweb.mnet.ne.jp/nakama/:embed:cite]
[https://rubular.com/:embed:cite]