我需要帮助根据这些规则为preg_match
构建正则表达式:
法律示例:
不合法的例子:
编辑:我删除了4条规则与neigbor chars'_'\' - '\'。'
请帮帮我。
由于
答案 0 :(得分:3)
试试这个正则表达式:
^[A-Za-z0-9]+([-_.][A-Za-z0-9]+)*$
这匹配任何以至少一个字母或数字(^[A-Za-z0-9]+
)开头的序列,后面可能跟有-
,_
或{{之一的零个或多个序列1}}(.
)必须至少跟一个字母或数字([-_.]
)。
答案 1 :(得分:2)
试试这个:
^[\p{L}\p{N}][\p{L}\p{N}_.-]*[\p{L}\p{N}]$
在PHP中:
if (preg_match(
'%^ # start of string
[\p{L}\p{N}] # letter or digit
[\p{L}\p{N}_.-]* # any number of letters/digits/-_.
[\p{L}\p{N}] # letter or digit
$ # end of the string.
%xu',
$subject)) {
# Successful match
} else {
# Match attempt failed
}
最小字符串长度:两个字符。
答案 2 :(得分:1)
嗯,对于你的每条规则:
第一个和最后一个字母/数字:
^[a-z0-9]
和
[a-z0-9]$
不允许使用空格(不需要任何内容,因为我们正在做一个正面匹配并且不允许任何地方有任何空格):
只有字母/数字/-/_/.
[a-z0-9_.-]*
没有相邻的符号:
(?!.*[_.-][_.-])
所以,一起:
/^[a-z0-9](?!.*[_.-][_.-])[a-z0-9_.-]*[a-z0-9]$/i
但是对于所有正则表达式,有多个解决方案,所以试试吧......
修改:进行修改:
/^[a-z0-9][a-z0-9_.-]*[a-z0-9]$/i
您只需删除要更改/远程规则的部分。就这么简单......
答案 3 :(得分:1)
这似乎适用于提供的示例:$patt = '/^[a-zA-Z0-9]+([-._][a-zA-Z0-9]+)*$/';