Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 名称字符串的Regexp_Php_Regex_Validation - Fatal编程技术网

Php 名称字符串的Regexp

Php 名称字符串的Regexp,php,regex,validation,Php,Regex,Validation,我正试图找到一个包含很多结果的regexp,如果没有很多国际名称中有特殊字母以及连字符,我现在使用的这个就足够了 我现在使用的是这样的: /^[A-Za-zåäöÅÄÖ\s\-\ ]*$/ 它允许连字符和空格,但也允许它们出现在字符串的开头或结尾,这是我不希望看到的 我需要对此进行修改以允许: 特殊信件,如ýÿÿåääö等,最好不用全部手工书写 每个新词开头的大写字母 单词之间的空白 -单词之间的连字符,但不能在完整字符串之前或之后 它不应该允许数字,但它已经不允许了。由于我没有在正则表达式构

我正试图找到一个包含很多结果的regexp,如果没有很多国际名称中有特殊字母以及连字符,我现在使用的这个就足够了

我现在使用的是这样的:

/^[A-Za-zåäöÅÄÖ\s\-\ ]*$/
它允许连字符和空格,但也允许它们出现在字符串的开头或结尾,这是我不希望看到的

我需要对此进行修改以允许:

特殊信件,如ýÿÿåääö等,最好不用全部手工书写 每个新词开头的大写字母 单词之间的空白 -单词之间的连字符,但不能在完整字符串之前或之后

它不应该允许数字,但它已经不允许了。由于我没有在正则表达式构造方面做过很多工作,我对如何实现这一点一无所知,我已经找到了很多解决方案,涵盖了一种或另一种情况,但不是我需要的所有解决方案。我将非常感谢您的帮助。正则表达式应该用于PHP验证

编辑:


这会在使用@npinti的解决方案时输出错误。

假设正则表达式引擎可以公开。您可以使用\p{L}匹配任何字母。因此,要匹配名称,可以使用^\p{Lu}\p{Ll}+[-]+\p{Lu}\p{Ll}+*$

这将允许您匹配一个大写字母,后跟一个或多个小写字母。反过来,后面可以是0个或多个空格和破折号的组合,然后是一个大写字母和一个或多个小写字母。开头和结尾的^和$确保正则表达式与整个字符串匹配


可以查看regex的演示。

什么regex引擎/平台?@AlexK。我正在使用PHP验证这是否是您的意思。请参阅\p{L}@&我认为如果您的系统运行在utf-8中,您可以将任何Perl Word字符(包括西里尔文、日文、阿拉伯文等)与\w匹配:尝试匹配名称是徒劳的。谁说名称部分只以大写字母开头?谁说名字不能包括数字?请阅读一些观点。它似乎不支持它。不幸的是,有替代方案吗?@Chrillewoodz:您使用的是什么版本的PHP?@PaulCrovella:我尝试过使用您提到的方法,但由于某种原因,我无法使其工作。如果你能提供一个例子,这将是很有用的:@Chrillewoodz:根据你的说法,应该包括在内。是的,我读过,所以我不知道为什么它不起作用,也许我做错了?我会更新问题,你们可以看一下。
$fname = 'Scrooge Mc-Duck'; //Only example string
$fname = trim($fname);

if (!preg_match('/^\p{Lu}\p{Ll}+([ -]+\p{Lu}\p{Ll}+)*$/', $fname)) {
    $fnameErr = 'Invalid first name'; 
}