我正在尝试检查
'@username'
'@username,'
'@username '
'@username.'
'@username. '
'@username:'
'@username: '
我目前有这个:
$post->message = preg_replace(
'/@ *('.preg_quote($speak['username'], '/').') *:/i',
'[url=\''.PAGE_URL.RELATIVE_WBB_DIR.'/index.php?page=User&userID='.$speak['toID'].'\']@'.$speak['username'].':[/url]',
$post->message);
有没有人有任何想法如何修改它以接受这些输入?
答案 0 :(得分:0)
修改你的正则表达式以添加标点符号:
$post->message = preg_replace(
'/@ *('.preg_quote($speak['username'], '/').')[:,.]? */i',
'[url=\''.PAGE_URL.RELATIVE_WBB_DIR.'/index.php?page=User&userID='.$speak['toID'].'\']@'.$speak['username'].':[/url]',
$post->message);
请注意添加的部分:
/@ *('.preg_quote($speak['username'], '/').')[:,.]? */i
^^^^^^
可选择匹配其中一个字符(冒号,逗号,句号)。
答案 1 :(得分:0)
这是一个应该达到你想要的正则表达式:
/^@[a-zA-Z]+[:\.\,]?[ ]?$/
/^@ // string starts with '@'
[a-zA-Z]+ // contains any letter at least once
[:\.\,]? // may contain any : , . zero or one time
[ ]?$ // may contain a whitespace zero or one time at end of string