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