尝试验证名称字段以确保它是所有字母字符或连字符或撇号

时间:2010-02-13 20:26:25

标签: php regex

if(!preg_match("/[a-zA-Z'-]/",$First)) { die ("invalid first name");}

当字段全部为数字时,上面仅标记输入为无效。字母和数字的组合通过确定。请给我们一些帮助。感谢。

7 个答案:

答案 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)) {,如果发生错误,它也会匹配,例如无效的正则表达式,因为!匹配返回值FALSE0

来自PHP Manualpreg_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');
}