PHP中的正则表达式以限制指定的字符

时间:2013-12-03 11:53:32

标签: php regex preg-replace preg-match

我有一个正则表达式,标准是这样的: 该字符串应包含a-zA-Z0-9,并且可能包含.-_等字符。如果有任何这些特殊字符,它应该只发生一次。

我想要的是将第一个字符限制为a-> z或0-9而不是(。 - _)在第一个字符后允许,如果有任何允许的特殊字符,它应该只出现一次。

所需格式如下:

  • joffinjoy =有效
  • joffin.joy =有效
  • joffin#joy = 无效
  • joffin.joy_007 = 无效
  • joffin-joy = valid
  • joffin-joy_007 = 无效

这就是我现在所拥有的。

<?php 
$buffer = 'joffin.joy';
if (preg_match('/[^a-z0-9.-_]/i', $buffer)){ 
echo 'in-valid characters<br/>';
}else{
echo 'valid characters<br/>';
}
?>

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

'/^[a-z0-9](?!.*?[._-]{2})[\w.-]*[a-z0-9]$/i'

这不允许:

  • 开始时的任何特殊角色&amp;端
  • 一个接一个的特殊字符

答案 1 :(得分:0)

这样的表达怎么样(没有优化,但意图应该清楚)

'/^[a-z0-9]+[._-]?[a-z0-9]+$/i'

只有有效名称才能与此匹配