我在函数中使用了模式/[a-z0-9_]+/i
:
function validate_twitter($username) {
if (eregi('/[a-z0-9_]+/i', $username)) {
return true;
}
}
有了这个,我测试输入是否是有效的推特用户名,但我遇到了困难,因为它没有给我一个有效的结果。
有人可以帮我找到解决方案。
答案 0 :(得分:37)
验证字符串是否是有效的Twitter句柄:
function validate_username($username)
{
return preg_match('/^[A-Za-z0-9_]{1,15}$/', $username);
}
如果您尝试在字符串中匹配@username
。
例如:RT @username: lorem ipsum @cjoudrey etc...
使用以下内容:
$string = 'RT @username: lorem ipsum @cjoudrey etc...';
preg_match_all('/@([A-Za-z0-9_]{1,15})/', $string, $usernames);
print_r($usernames);
您可以将后者与preg_replace_callback一起使用来链接字符串中的用户名。
编辑:Twitter也open sourced text libraries用于Java和Ruby,用于匹配用户名,哈希标签等。您可以查看代码并找到他们使用的正则表达式模式。
编辑(2):这是Twitter文本库的PHP端口:https://github.com/mzsanford/twitter-text-php#readme
答案 1 :(得分:3)
请勿将/
与ereg*
一起使用。
事实上,如果可以避免,请不要使用ereg*
。 http://php.net/preg_match
编辑:另请注意,/[a-z0-9_]+/i
将与spaces are invalid
和not-a-real-name
匹配。你几乎肯定想要/^[a-z0-9_]+$/i
。
取值
答案 2 :(得分:2)
我相信您正在使用PCRE表单,在这种情况下,您应该使用preg_match函数。
答案 3 :(得分:2)
eregi()
不会指望任何/
或其他切换。只需使用eregi('[a-z0-9_]+')
答案 4 :(得分:2)
您的正则表达式有效,但它允许空格FYI。 (如果你想测试正则表达式,我建议:http://rubular.com/)。
这里的第一个问题是您使用的eregi
自PHP 5.3起已弃用。建议您使用preg_match
,它具有相同的语法。尝试一下,看看它是否有帮助。
preg_match的PHP文档:http://www.php.net/manual/en/function.preg-match.php eregi的PHP文档:http://php.net/manual/en/function.eregi.php
答案 5 :(得分:2)
Twitter用户名有1到15个字符...所以使用/^[a-z0-9_]{1,15}$/i
可能会更好。