我正在寻找一个正则表达式,如果字符串包含字符或仅包含5位数字或包含php字符串
,则返回true尝试了这个^\D{0,5}$
但它不起作用
例如:
12345 - return true
1234455667&&&% . - true
123456 -false
1234 - true
FFGF - true
empty string - true
答案 0 :(得分:2)
如果我理解正确的话。如果满足以下任何条件,您需要true
:
我们可以使用|
来区分这三个条件。
^(?:\d{0,5}|.*?\D.*)$
请注意,空字符串大小写也与\d{0,5}
答案 1 :(得分:1)
PHP代码(test online):
$str = '1234';
if (preg_match('~^(?(?=\d+$)\d{1,5}|.*)$~', $str)) {
// true
}
如果您说数字不应该是5或更多,您应该为它们构建路径。一种方法是使用条件构造,PCRE支持(?()...)
:
^(?(?=\d+$)\d{1,5}|.*)$
故障:
^
匹配输入字符串的开头(?
有条件的开始
(?=\d+$)
正向前瞻,如果只是数字\d{1,5}
最多五个字符|
否则.*
匹配任何其他内容)
构造结束$
匹配输入字符串的结尾答案 2 :(得分:1)
您可以匹配一个由1到4位数组成的字符串,或者为空,或者不是所有数字:
if (preg_match('~^(\d{1,5}|(?!\d+$).*)$~', $v)) {
return true;
}
请参阅regex demo。详细说明:
^
- 字符串开头(
- 开始匹配的分组构造...
\d{1,5}
- 1到5位|
- 或(?!\d+$).*
- 任意0个字符(除了换行符,添加s
修饰符以使其与换行符匹配)尽可能多,但不等于所有数字)
- 分组构造的结尾$
- 字符串结束。请参阅PHP demo:
$strs = ['12345', '1234455667&&&% .', '123456', '1234', ''];
foreach ($strs as $v) {
if (preg_match('~^(\d{1,5}|(?!\d+$).*)$~', $v)) {
echo "$v: true\n";
} else {
echo "$v: false\n";
}
}
输出:
12345: true
1234455667&&&% .: true
123456: false
1234: true
: true