为了账号安全,请及时绑定邮箱和手机立即绑定

用于在 URL 中查找语言环境的正则表达式

用于在 URL 中查找语言环境的正则表达式

PHP
aluckdog 2023-05-12 16:05:17
我正在做正则表达式来解析 url 并在我的网站上查找语言环境。我所做的是这段代码:<?php$app_conf = require_once __DIR__ . '/../config/app.php';function extract_lang($avail){    $uri_lang = [];    if (preg_match('/^(\/)+([a-z]{2})(\/+.*)?/', $_SERVER['REQUEST_URI'], $uri_lang)) {        if (in_array($uri_lang[2], $avail)) {            $_SERVER['REQUEST_URI'] = isset($uri_lang[3]) ? $uri_lang[3] : "/";            $_SERVER['HTTP_LANG'] = $uri_lang[2];        }    }}if ($app_conf['extract_from_uri']) {    extract_lang($app_conf['locales']);}它大部分时间都在工作,但它有错误。如果我给定的 url 以“en”开头 - 它认为它是一个语言环境并使我的应用程序逻辑崩溃。导致错误的示例路由:https://m2.test/environmental_projects我需要以某种方式更新我的正则表达式,但我正在为此苦苦挣扎,请帮助我。在语言环境配置中我有数组'locales' => ['en', 'ru']好的路线应该看起来像https://m2.test/en/environmental_projects
查看完整描述

1 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

您可以匹配单个正斜杠,在第一组中捕获 2 个字符 az,然后使第 2 组可选匹配正斜杠和除以锚结尾的换行符之外的任何字符$

注意,现在有 2 个捕获组而不是 3 个,并且如果将分隔符更改为 char 而不是/like 例如~,则不必转义正斜杠。

^/([a-z]{2})(/.*)?$

查看正则表达式演示

例如

if (preg_match('~^/([a-z]{2})(/.*)?$~', $_SERVER['REQUEST_URI'], $uri_lang)) {


查看完整回答
反对 回复 2023-05-12
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信