【问题标题】:Why is my RegEx working in PHP but not in JavaScript?为什么我的 RegEx 可以在 PHP 中工作,但不能在 JavaScript 中工作?
【发布时间】:2018-04-30 17:57:00
【问题描述】:

我无法让那些 RegEx 模式与 JavaScript 一起工作(在 PHP 中它们工作):

/^[^\/home\/]/
/^\/home\/$/
/^\/home\/.+\/.+$/

我想允许这样的输入:

/home/username

我不想要的是:

/home/
/username
/home/username/info

这是我的代码:

var regex1 = /^[^\/home\/]/;
var regex2 = /^\/home\/$/;
var regex3 = /^\/home\/.+\/.+$/;
if( regex1.test(homedir)
|| regex2.test(homedir)
|| regex3.test(homedir) ) { ... }

我在控制台中没有错误。

有人可以向我解释为什么它不能在 JavaScript 中工作吗?

编辑

我把它改成了/^\/home\/[A-Za-z0-9]+$/,现在它可以工作了:

var rgx = /^\/home\/[A-Za-z0-9]+$/;
if( !rgx.test(homedir) ) { ... }

【问题讨论】:

  • 请张贴您的输入字符串和预期输出
  • “为什么它在 JavaScript 中不起作用”你能说出什么不起作用吗?控制台中有一些错误?您是否尝试使用此正则表达式替换或查找某些内容?请说得更具体
  • 非常感谢@sln - 是的,我同意我可能不得不重写它。我只是想了解它在 PHP 中的不同之处。
  • 我将它重写为/^\/home\/[A-Za-z0-9]+$/,它工作正常,因为我现在检查字符串是否匹配,而不是检查它是否不匹配,就像@sln 建议的那样。谢谢大家的帮助:)

标签: javascript regex


【解决方案1】:

去掉字符串开始正则表达式参数^

您现在将拥有:\/home\/.+\/.+$

此处构建的示例显示验证:Regex Home URL example

【讨论】:

  • 谢谢,我做到了(删除了^)。我现在也匹配像/home/username这样的有效输入。
  • Regexr 是帮助您构建和验证正则表达式的好工具
猜你喜欢
  • 1970-01-01
  • 2020-03-15
  • 2013-04-09
  • 2019-10-25
  • 2020-01-22
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多