【问题标题】:PHP: Regex for exact matchPHP:精确匹配的正则表达式
【发布时间】:2012-03-13 04:16:10
【问题描述】:

这是我目前拥有的正则表达式(哪种有效):

$regex = '/[\w ]{7,30}/';

我的修改看起来像我想要的,但它根本不起作用:

$regex = '^[\w ]{7,30}$';

这是我使用正则表达式的方式:

public function isValid( $value )
{

    $regex = '/^[\w ]{7,30}$/';
    return preg_match( $regex, $value ) ? true : false;

}

我正在尝试匹配以下内容:

  • 任何小写/大写字母
  • 任何数字
  • 可以包含空格
  • 不能包含换行符或制表符空间
  • 至少 7 个字符
  • 最多 30 个字符

有效输入:

  • 测试
  • 测试
  • 测试123
  • 测试 123
  • 测试___

无效输入:

  • 测试#
  • Testin8+
  • 测试仪1&

第一个正则表达式将匹配所有有效输入,以及无效输入(只要前四个字符有效,其余的不关心)。第二个正则表达式不匹配。

【问题讨论】:

  • ^…$ 匹配整个字符串。 \w 匹配字符,\d 匹配数字
  • 为了更好地匹配空格,请使用 \s /[\w\s]{7,30}/
  • @alickus \s 包括换行符和制表符,所以不,最好使用\s
  • 这应该会给你一个错误,因为括号/分隔符是/缺少。试试$regex = '/^[\w ]{7,30}$/';
  • @Brian 如果你有这样的要求,那么是的,只是尝试 quess 'kind of works'

标签: php regex pattern-matching


【解决方案1】:

尝试像这样结合两者:

$regex = '/^[\w ]{7,30}$/';

【讨论】:

  • 我需要添加分隔符并从我的 ajax 请求中转义输入。除非转义,否则不会发送某些特殊字符。
【解决方案2】:

不要忘记你的分隔符:

/^[\w ]{7,30}$/

【讨论】:

    【解决方案3】:

    您缺少开头和结尾的 /

    $regex = '/^[\w ]{7,30}$/';
    

    【讨论】:

    • 我的错;当我写下我的答案时,这条评论还没有出现。
    【解决方案4】:
    '/^[\w ]{7,30}$/'
    

    您缺少分隔符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 2021-11-10
      相关资源
      最近更新 更多