【问题标题】:How do I make a string invalid if it begins or ends with a dot?如果字符串以点开头或结尾,如何使字符串无效?
【发布时间】:2016-02-11 00:01:22
【问题描述】:

例如,我希望 .brewpixelsbrewpixels. 回显

您的用户名无效

如果点在第一个和最后一个字母之间的任何地方,脚本应该回显

你的用户名很好

如何更改我的正则表达式来完成此操作?

$username = 'brew.pixels';

if(preg_match('/(^\d|[^\w])/', $username)){
    echo 'your username is invalid';
} else {
    echo 'your username is good';
}

【问题讨论】:

标签: php regex


【解决方案1】:

以下将匹配以点开头或结尾的字符串

(诀窍是转义点,因为它在正则表达式中具有特殊含义)

/^\.|\.$/

DEMO

附加条件only alpha num underscore and dot within the body:

/^(\.[\w.]+|[\w.]+\.)$/

DEMO

只需在您给定的代码中替换:

if(preg_match(regexToMatchBadWords, $username)){
    echo 'your username is invalid';
} else {
    echo 'your username is good';
}

或者,您可以通过强制第一个和最后一个字符为 alpha-num-underscore 并且内部正文也接受点来直接匹配正确的单词:

/^(\w[\w.]+\w)$/

DEMO

这会反转代码中的逻辑:

if(preg_match(/^(\w[\w.]+\w)$/, $username)){
    echo 'your username is good';
} else {
    echo 'your username is invalid';
}

【讨论】:

  • 这可行,但我失去了功能。我提供的正则表达式只允许字母数字字符和下划线。我希望最终的正则表达式也这样做,并防止在字符串的开头和结尾出现点。
  • @brewpixels 您允许在正文中使用 alphaNum 字符 + 下划线 + 点,对吗?
  • 是的,没错。但是 alphaNum 字符和下划线可以在正文之外。
  • 试试我上次的编辑,如果它不起作用,我需要例子来处理! (快点,我必须在 30 分钟内离开 xD)
【解决方案2】:

我不确定您是否说您希望它具有其他正则表达式信息,但您可以这样做:

if (preg_match('/^\./', $username) || preg_match('/\.$/', $username) {
  echo 'invalid';
}

这将生成 .brew 和 brew。失败。

我忘记了管道字符,请参阅 Enissays 答案以了解正确的更简单方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2011-11-02
    • 2020-11-07
    • 1970-01-01
    相关资源
    最近更新 更多