假设您具有以下值:
123
1234
4567
12
1
我正在尝试纠正一个 preg_match,它只会为 '123' 返回 true,因此仅匹配 3 位数字。这就是我所拥有的,但它也匹配 1234 和 4567。我可能也有一些东西。
preg_match('/[0-9]{3}/',$number);
假设您具有以下值:
123
1234
4567
12
1
我正在尝试纠正一个 preg_match,它只会为 '123' 返回 true,因此仅匹配 3 位数字。这就是我所拥有的,但它也匹配 1234 和 4567。我可能也有一些东西。
preg_match('/[0-9]{3}/',$number);
你需要的是锚点:
preg_match('/^[0-9]{3}$/',$number);
它们表示字符串的开始和结束。您需要它们的原因是,通常正则表达式匹配会尝试在主题中找到任何匹配的子字符串。
正如 rambo coder 指出的那样$
,如果最后一个字符是新行,则也可以在字符串中的最后一个字符之前匹配。要更改此行为(这样456\n
不会导致匹配),请使用D
修饰符:
preg_match('/^[0-9]{3}$/D',$number);
或者,使用\z
which 始终匹配字符串的最后,无论修饰符如何(感谢 Ωmega):
preg_match('/^[0-9]{3}\z/',$number);
你说“我也可能有一些事情”。如果这意味着您的字符串应该以三个数字开头,但之后可以有任何内容(只要它不是另一个数字),您应该使用负前瞻:
preg_match('/^[0-9]{3}(?![0-9])/',$number);
现在它也会匹配123abc
。使用否定的lookbehind ,同样可以应用于正则表达式的开头(如果abc123def
应该给出匹配):
preg_match('/(?<![0-9])[0-9]{3}(?![0-9])/',$number);
您需要锚定正则表达式
/^\d{3}$/
如果您在文本中的任何位置搜索 3 位数字,请使用正则表达式模式
/(?<!\d)\d{3}(?!\d)/
但是,如果您检查输入只是 3 位数字而不是其他数字,那么请使用
/\A\d{3}\z/