我一直在尝试检查一个字符串值是否以数值或空格开头并相应地采取行动,但它似乎没有起作用。这是我的代码:
private static function ParseGamertag( $gamertag )
{
$safetag = preg_replace( "/[^a-zA-Z0-9\s]+/", "", $gamertag ); // Remove all illegal characters : works
$safetag = preg_replace( "/[\s]+/", "\s", $safetag ); // Replace all 1 or more space characters with only 1 space : works
$safetag = preg_replace( "/\s/", "%20", $safetag ); // Encode the space characters : works
if ( preg_match( "/[^\d\s][a-zA-Z0-9\s]*/", $safetag ) ) // Match a string that does not start with numerical value : not working
return ( $safetag );
else
return ( null );
}
因此hiphop112
有效但112hiphip
无效。 0down
无效。
第一个字符是字母字符[a-zA-Z]
。
非常感谢任何帮助。
答案 0 :(得分:4)
您需要使用锚点^
preg_match( "/^[^\d\s][a-zA-Z0-9\s]*/", $safetag )
否则你的正则表达式会在字符串
中找到一个有效的匹配您可以找到锚here on regular-expressions.info
的解释请注意^
的不同含义。在字符类之外,它是字符串开头的锚点,在第一个位置的字符类中,它是类的否定。
答案 1 :(得分:3)
尝试添加^
以表示字符串的开头...
preg_match( "/^[^\d\s][a-zA-Z0-9\s]*/", $safetag )
另外,如果第一个字符必须是字母,这可能会更好:
preg_match( "/^[a-zA-Z][a-zA-Z0-9\s]*/", $safetag )
答案 2 :(得分:2)
使用^
标记字符串的开头(尽管^
中的[ ]
表示不是)。
您也可以使用\w
代替a-zA-Z0-9
/^[^\d\s][\w\s]*/
答案 3 :(得分:1)
在正则表达式的开头添加“以胡萝卜开头”:
/^[^\d\s][a-zA-Z0-9\s]*/
答案 4 :(得分:1)
首先,没有任何内容可以匹配,因为你用%20替换了所有空格。
为什么不积极匹配:
[a-zA-Z][a-zA-Z0-9\s]*
答案 5 :(得分:0)
preg_match( "/^[a-zA-Z]+[a-zA-Z0-9\s]*/", $safetag ) )