php - 如何将 http(s) 添加到正则表达式?
问题描述
一般来说,我在编码方面完全是新手,我正在构建我的第一个网站,在帐户创建表单中的某个时刻会要求用户的社交媒体个人资料网址。默认情况下,.tpl 文件会这样说;
public function isValidUrl($url) {
return preg_match('|^[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
//return (filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
}
public function addScheme($url) {
$scheme = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|| $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://';
return parse_url($url, PHP_URL_SCHEME) === null ? $scheme . $url : $url;
}
我的问题是它要求用户在“http//:www”之后复制部分 url。而不是简单地从浏览器的地址栏中复制/粘贴整个 url。
谁能告诉我如何修改上面的代码以使用户更容易?
提前致谢。
解决方案
这并不难,只要您对称为正则表达式的魔法有了基本的了解。我真的鼓励你读一点。
这些方面的东西可能会起作用:
return preg_match('|^(http(s)?:\/\/)?[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
regex101.com 在使用正则表达式时是一个非常有用的网站。查看此链接以解释您的正则表达式(包括我添加的部分)。
推荐阅读
- java - 如何等待多个 Flux 和 Mono 发布者同时完成
- python - 桌面上路径的python字符串
- javascript - 输入字段值在一个区域工作而不在另一个区域工作
- typescript - 从导出的 Typescript 命名空间导入接口
- go - 反转二叉树:如何正确交换整个左树和右树
- swift - 如何指定哪个构建目标包含特定的 swift 包依赖项?
- clojure - 十进制转二进制 Clojure
- apache-spark - 任务失败后如何让 PySpark/Databricks 作业继续运行并忽略不良记录
- numpy - CuPy 和 Dirichlet 给了我 TypeError: unsupported operand type(s) for +=: 'int' and 'tuple'
- lua - 如何使用开发产品在 Roblox 中制作持续 30 秒的盾牌?