if(!preg_match("/[a-zA-Z'-]/",$First)) { die ("invalid first name");}
当字段全部为数字时,上面仅标记输入为无效。字母和数字的组合通过确定。请给我们一些帮助。感谢。
答案 0 :(得分:20)
尝试:
if(!preg_match("/^[a-zA-Z'-]+$/",$First)) { die ("invalid first name");}
^
匹配字符串的开头,$
匹配字符串的结尾,+
后字符组表示“一个或多个”匹配的字符。
答案 1 :(得分:4)
您只匹配一个角色。您需要添加通配符,例如+
(1或更多)。你也匹配字符串中的任何地方。您需要添加锚点(^
用于字符串的开头,$
用于字符串的结尾)以确保没有无效字符。
if (!preg_match("/^[a-zA-Z'-]+$/", $First)) { die ("invalid first name");}
或者,您可以查找不匹配的字符:
if (preg_match("/[^a-zA-Z'-]/", $First)) { die ("invalid first name");}
方括号内的^
表示“任何不属于这些字符的字符”。
答案 2 :(得分:3)
在这种情况下,查找无效字符比尝试匹配所有字符更好,一旦出现单个无效字符,搜索就可以退出并返回失败。这比总是扫描整个字符串更有效。
if (preg_match("/[^A-Za-z'-]/", $First)) { die ("invalid first name"); }
set []内的^使它匹配不在集合中的所有内容。如果我们甚至有一个无效字符,则字符串无效,因此集合不需要重复操作符。
更好的是更有用的错误消息
if (preg_match("/[^A-Za-z'-]/", $First, $Inv)) { die ("{$Inv[0]} not allowed in first name"); }
答案 3 :(得分:1)
你可以尝试这个,因为你想要全名,例如“JOHN RAMBO”
HTML FORM.PHP
<div class="error"><?php echo $error['name']; ?></div>
<input name="name" type="text" value="<?php echo $input['name']; ?>" class="inputf">
PHP联系页面
if(!preg_match("/^[a-zA-Z'-]/", $input['name']))
{
// name is in-valid
$error['name'] = 'Invalid Name';
include('views/form.php');
}
答案 4 :(得分:1)
添加重音字符也许很聪明,所以“PierreBézier”可以填写你的表格。添加:
À-ÿ
..你的正则表达式会做到这一点。这样的事情,包括一切:
/^([a-zA-ZÀ-ÿ-' ]+)$/
答案 5 :(得分:0)
这是我能够提出的解决方案。应该能够处理有撇号,超量和空格的名称的验证问题。
if(!preg_match('/^([a-zA-Z]+[\'-]?[a-zA-Z]+[ ]?)+$/', $string))
答案 6 :(得分:0)
如果您使用if (!preg_match("/^[a-zA-Z'-]+$/", $firstName)) {
,如果发生错误,它也会匹配,例如无效的正则表达式,因为!
匹配返回值FALSE
和0
。
来自PHP Manual:
preg_match() returns 1 if the pattern matches given subject, 0 if it does not, or FALSE if an error occurred.
因此,确保名称符合您要求的最佳方法是:
if (preg_match("/^[a-zA-Z'-]+$/", $firstName) === 1) {
die('Valid name');
} else {
die('Invalid name or error');
}