检查PHP字符串是否包含西里尔字母的字母数字字符?

3

我在网络上找到了许多不同的模式(测试了它们所有),我还为页面添加了编码,但似乎没有什么作用。这是我的代码:

<?php header('Content-Type: text/html; charset=utf-8'); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
<?php



$teststring="cc12cž";


$pattern  = "/^[p{L}\p{M}\a-zA-Z*0-9\s\-]+$/u";
if(preg_match($pattern, $teststring))
    {echo"IT IS ALFANUMERIC";}
else
    {echo"ERROR";}


?>

</body></html>

这是我尝试过的内容

//$pattern  = "/^[\p{L}\p{M}\a-zA-Z*0-9\s\-]+$/u"; 
//$pattern  = "/^[p{L}\p{M}\a-zA-Z*0-9\s\-]+$/u"
//$pattern  ='/^[a-zA-Z\p{Cyrillic}\d\s\-]+$/u'
//$pattern  ="/(*UTF8)^[[:alnum:]]+$/"
//$pattern  ="/^[a-zA-Z\p{Cyrillic}\p{Cyrillic}]+$/u"

1
p{L} 前面加上反斜杠,它就可以工作了。https://regex101.com/r/iY8cM3/3 - Charlotte Dunois
刚刚尝试了 $pattern = "/^[\p{L}\p{M}\a-zA-Z*0-9\s-]+$/u"; 仍然不起作用。 - Dime
甚至我的旧模式也表现出了不良行为! - Dime
2
ž 不是西里尔字母,更像是波兰字母表中带有一些额外重音符号的标准字母。这是西里尔字母:на здоровье。 - maraca
使用 mb_ereg 代替 preg_match 怎么样? - Elzo Valugi
显示剩余5条评论
1个回答

3

我使用ZF进行了一项测试,使用Zend_Validate_Alnum,您的字符串似乎已正确验证。

$validator = new Zend_Validate_Alnum();
if ($validator->isValid('cc12cž')) {
    // value contains only allowed chars
    echo "IT IS ALFANUMERIC";
} else {
    echo "ERROR";
} 

从我所看到的他们的验证技术相当简单,不涉及regexp

if (!is_string($value) && !is_int($value) && !is_float($value)) {
    $this->_error(self::INVALID);
    return false;
}

谢谢,我已经使用提供的函数。是否可以添加检查特殊字符并在有的情况下返回false的功能呢?因为现在它会返回true,即使字符串像这样“%$## @@!@$%+ _ {} |??123>><”。 - Dime
1
@Dime 首先你可以使用这个方法检查字符串是否为Alnum。如果通过了这个检查,你可以添加另一个检查,使用正则表达式或者一个包含其他你不想要的字符的列表 - 一个排除规则。 - Elzo Valugi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接