PHP: 正则表达式用于精确匹配

3

这是我现在使用的正则表达式(还算可以):

$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 个字符

有效输入:

  • Testing
  • Test ing
  • Test123
  • Test 123
  • Test___

无效输入:

  • Testing#
  • Testin8+
  • Tester1&
第一个正则表达式将匹配所有有效输入,以及无效输入(只要前四个字符是有效的,它就不关心其余部分)。第二个正则表达式不匹配任何内容。

为了更好地匹配空格,请使用\s / [\ w \ s] {7,30} /。 - Aurimas Ličkus
@alickus \s 包括换行和制表符,因此不,使用\s并不更好。 - Nahydrin
@Radu 我已经添加了正在使用的代码,以及无效的输入,它们正在通过,但实际上不应该通过。 - Nahydrin
isVaild('Test 123') 返回 true,而 isValid('Testing#') 返回 false。这不是预期的行为吗? - rid
由于某些原因,isValid('Testing#'); 返回 true。我应该指出,我是通过 jQuery ajax 请求发送这些值的。 - Nahydrin
显示剩余6条评论
4个回答

3
尝试将它们结合起来,如下所示:

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

我需要添加分隔符并转义我的ajax请求中的输入。一些特殊字符如果不进行转义就无法发送。 - Nahydrin

1

不要忘记你的分隔符:

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


1
你忘记在开头和结尾加上 /
$regex = '/^[\w ]{7,30}$/';

我的错;当我写下我的答案时,那个评论还没有发布。 - Edwin

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

你缺少分隔符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接