Php 将Unicode字符串的正则表达式与至少一个空格匹配
我正在尝试验证必须符合以下规则的字符串:Php 将Unicode字符串的正则表达式与至少一个空格匹配,php,regex,string,unicode,php-5.3,Php,Regex,String,Unicode,Php 5.3,我正在尝试验证必须符合以下规则的字符串: 允许的字符为: 所有Unicode字母[a-z][a-z]和其他字母,如(á、é、í、ó、ú、ü、ñ等) 所有数字[0-9] 仅限这些特殊字符(空格、撇号、破折号、点) 字符串必须至少包含4个字母数字字符。空格、撇号、破折号和点不计入最小长度 字符串不能以数字、撇号、破折号或点开头 字符串的字符之间必须至少有一个空格。请注意,字符串是为前导空格和尾随空格修剪的,因此永远不会有前导空格或尾随空格 这就是我取得的成绩: if (preg_match("/
- 所有Unicode字母[a-z][a-z]和其他字母,如(á、é、í、ó、ú、ü、ñ等)
- 所有数字[0-9]
- 仅限这些特殊字符(空格、撇号、破折号、点)
if (preg_match("/^[\p{L}\p{M}][\s\p{L}\p{M}-'\.]{4,}$/u", $name, $matches)) {
echo "Match was found: '{$matches[0]}' in '$name'<br />";
}
这可能有效,但尚未进行测试。
编辑:嗯,在测试/调试之后,这就是我得到的,祝你好运
# ^(?=[\pL\pN\s'\-.]+$)(?=[^\pL\pN]*(?:[\pL\pN][^\pL\pN]*){4,}$)(?![\pN'\-.])(?=\S+\s+\S)
^
(?= [\pL\pN\s'\-.]+ $ ) # Allowed characters
(?= # At least 4 alphanumeric chars
[^\pL\pN]*
(?: [\pL\pN] [^\pL\pN]* ){4,}
$
)
(?! [\pN'\-.] ) # Cannot start with these
(?= # At least 1 whitespace after first char / before last char
\S+ \s+ \S
)
您所有的'-->商品都违反了规则4。没关系,请参见示例。+1抱歉,回复太晚。它就像一个符咒:D非常感谢
# ^(?=[\pL\pN\s'\-.]+$)(?=[^\pL\pN]*(?:[\pL\pN][^\pL\pN]*){4,}$)(?![\pN'\-.])(?=\S+\s+\S)
^
(?= [\pL\pN\s'\-.]+ $ ) # Allowed characters
(?= # At least 4 alphanumeric chars
[^\pL\pN]*
(?: [\pL\pN] [^\pL\pN]* ){4,}
$
)
(?! [\pN'\-.] ) # Cannot start with these
(?= # At least 1 whitespace after first char / before last char
\S+ \s+ \S
)