我正在创建一个密码验证器,它可以获取任何字符,但只有空格并且至少包含6个字符。
搜索到最好的后,我想出来就是这个例子: What is the regular expression for matching that contains no white space in between text?
它不允许中间的任何空格,但允许以空格开头和结尾。我想禁止传递的字符串中的任何空格。
我尝试了这个,但它不起作用:
if (preg_match("/^[^\s]+[\S+][^\s]{6}$/", $string)) {
return true;
} else {
return false;
}
感谢。
答案 0 :(得分:9)
最简单的表达方式:
^\S{6,}$
^
表示字符串
的开头
\S
匹配任何非空白字符
{6,}
表示6个或更多
$
表示字符串
在PHP中,这看起来像
preg_match('/^\S{6,}$/', $string)
修改强>
>> preg_match('/^\S{6,}$/', "abcdef\n")
1
>> preg_match('/^\S{6,}\z/', "abcdef\n")
0
>> preg_match('/^\S{6,}$/D', "abcdef\n")
0
Qtax
是对的。好决定!虽然如果你从HTML <input type="text">
中获取输入,你可能不会有任何换行符。
答案 1 :(得分:9)
这样的事情:
/^\S{6,}\z/
可以引用如:
preg_match('/^\S{6,}\z/', $string)
使用$
的所有答案都是错误的(至少没有任何特殊标志)。如果您不想在字符串末尾允许换行,则应使用\z
而不是$
。
$
匹配字符串的结尾或 之前 字符串结尾处的换行符(如果没有使用修饰符)< / LI>
\z
匹配字符串的结尾(独立于多行模式)来自http://www.pcre.org/pcre.txt:
^ start of subject
also after internal newline in multiline mode
\A start of subject
$ end of subject
also before newline at end of subject
also before internal newline in multiline mode
\Z end of subject
also before newline at end of subject
\z end of subject
答案 2 :(得分:0)
\S
- 匹配任何非空白字符。相当于Unicode字符类别[^\f\n\r\t\v\x85\p{Z}]
。如果使用ECMAScript选项指定符合ECMAScript的行为,则\S
等同于[^ \f\n\r\t\v]
。
您可以执行的字符串的开头:^[ \t]+
,以及结尾:[ \t]+$
(制表符和空格)
ETA:
顺便说一句,你是正则表达式[\S+]
,我认为你正在寻找:[\S]+
答案 3 :(得分:0)
答案 4 :(得分:0)
试试这个。这将匹配至少6个非空白字符,后跟任意数量的其他非空白字符。
^[^\s]{6}[^\s]*$