我的答案几乎就像这样: Pregmatch for at least 3 letters and for minus and apostrophe
所以,我还需要一个名称验证的正则表达式。但我的规则有点不同:
只能接受一个撇号(')或者没有其他人 - 这些是唯一可以使用的特殊字符...(不是强制性的,也不在名称中)。你把撇号放在哪里都没关系
代表:
d' amico =>必须被接受;
d' Amico的' =>没有
d' amico =>没有
' oneil =>没有
戴尔' amore =>是
damico =>是
king kong =>是
io =>没有
io9 =>没有
8888 =>没有
AAA +++? =>没有
到目前为止,我有这段代码:
<?php
...
// Array errori
$error = array(); // o $error = []; se hai una versione di php recente
// Controllo il Nome Utente
if(trim($nome) == ''){
$error[] = 'Campo nome non compilato'; }
if (ctype_alnum($nome))
{$error[] = 'Se vuoi modificare il campo nome, assicurati che lo
stesso non contenga numeri al suo interno!'; }
if(strlen($nome) < 3 || strlen($nome) > 20){
$error[] = 'Il campo nome deve contenere minimo 3 caratteri e massimo 20 caratteri'; }
if (!preg_match("/^([A-Za-z|àèéìòù][A-Za-z'-]*?){3,}$/", $nome)) {
$error[] = 'Il campo nome contiene caratteri non ammessi'; }
...
?>
<html>...
<?php
if(!empty($error)){
echo '<center>';
echo implode('<br/>', $error);
echo '</center>';
}
?>
...
</html>
如何将所有内容组合成一个字符串? 提前谢谢!
答案 0 :(得分:0)
使用否定预测,您可以断言字符串不以'
,空格开头,或包含2个(或更多)单引号。然后,您可以使用允许的字符列表测试字符串长度在3到20个字符之间。
(?!(.*?'.*?'|^[' ]))^[A-Za-z|àèéìòù ']{3,20}$
正则表达式演示:https://regex101.com/r/QANVBo/1
PHP演示:https://eval.in/659769
PHP用法:
$array = array("d'amico", "dell'amore", "damico", "king kong", "io", "io9", "8888", "aaa+++?", "d'amico'", "d''amico", "'oneil");
foreach ($array as $term ) {
if(preg_match("/(?!(.*?'.*?'|^[' ]))^[A-Za-z|àèéìòù ']{3,20}$/", $term)) {
echo 'Matches:';
} else {
echo 'No Match:';
}
echo $term . "\n";
}