当前位置: 首页 > 知识库问答 >
问题:

Mod rewrite regex:如何在其他字符之间只允许一个句点?

公西兴业
2023-03-14

我正在编写一个mod重写规则,在任意长度的字符之间只允许有一个句点。字符必须以字母开头,后跟2-29个字符或数字,并且中间只能有一个句点(可选)(但决不能在末尾)。

这是我到目前为止所拥有的:

RewriteCond    %{REQUEST_FILENAME}        !-f
RewriteCond    %{REQUEST_FILENAME}        !-d
RewriteRule    ^([a-z]([.a-z0-9]{2,29}))$    user.php?u=$1     [NC,QSA,L]

此规则不起作用,因为它允许f.oo(有效)、foo.(无效)、f. o. o(无效),甚至f......

是否可以仅使用apache的mod重写来完成?或者检查必须在PHP或其他地方完成?

类似的问题:这个和这个。

非常感谢。

共有2个答案

寿嘉悦
2023-03-14

我不知道如何在一个正则表达式中实现,但你可以堆叠你的正则表达式

^[a-z][.a-z0-9]{2,29}$     #3-30 characters long, starting with a letter, then nums
^[a-z0-9]+\.?[a-z0-9]+$    #has zero or one dot in middle

更新以考虑数字

http://regex101.com/r/nD2lI6

http://regex101.com/r/gR3vA1

所以完整的例子应该是这样的:

RewriteCond    %{REQUEST_FILENAME}        !-f
RewriteCond    %{REQUEST_FILENAME}        !-d
RewriteCond    %{REQUEST_URI}  ^[a-z][.a-z0-9]{2,29}$
RewriteRule    ^([a-z0-9]+\.?[a-z0-9]+)$     user.php?u=$1     [NC,QSA,L]
牧献
2023-03-14

我不能用一条规则来做,所以我用了两条:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 ^.{3,30}$
RewriteRule ^([a-z][a-z0-9]*(?:\.[a-z0-9]+)?)$ user.php?u=$1 [NC,QSA,L]
 类似资料:
  • 我在ASP.NET应用程序中有一个textbox,我需要使用正则表达式来验证用户输入字符串。要求字符串的连字符总数只能为一个。 匹配项: null 测试--您好 -测试- 测试-您好--

  • 我的目标的一个例子是: 我的目标是: 我不知道如何处理这件事,任何帮助都是很好的,我的目标是在最后有每一个可能的组合点和我的字,这是“你好”。

  • 我正在尝试编写一个正则表达式以允许数字和中间只有一个hypen(不能在开始或结束时)说模式:,是可以接受的,但模式:或或或或是不可接受的 我试过这样做,但这将允许-在开始时,也允许多个- 我不太擅长正则表达式,所以一点解释会很有帮助。 编辑:很抱歉再次打扰你,但我需要的数字只有2位(123-346)应被视为无效。

  • 问题内容: 例如,假设我有一个字符串,如下所示: 可以从该字符串中提取什么Go代码?我对Go还是比较陌生。任何帮助是极大的赞赏! 问题答案: 有很多方法可以拆分所有编程语言中的字符串。 由于我不知道您的特别要求,因此提供了一种示例方法,可从示例中获取所需的输出。 在上面的代码中,您从字符串的左侧和右侧进行了修剪。 正如我所说的,有数百种拆分特定字符串的方法,但这只是使您入门的一个示例。 希望对您有

  • 问题内容: 我正在尝试用JavaFX制作数独游戏,但我不知道如何只允许输入一个字母。对此的答案是调用文本字段并执行以下操作: 上面的方法不适用于复制粘贴…或大量其他事情,等等。像这样使用按键监听器似乎是一个AWFUL想法。一定有更好的东西吗?是否存在文本字段的属性,仅允许输入某些字符,或仅允许输入一定数量的字符? 谢谢! 问题答案: 您可以使用来执行此操作。该可以修改都在文本字段做,如果有一个与之