带有特殊字符的名称的正则表达式(Unicode)

好的,我整天都在阅读正则表达式,但仍然不太了解它。我正在尝试做的是验证名称,但是我在互联网上可以找到的功能只能使用[a-zA-Z],而我需要接受的字符除外。

我基本上需要一个正则表达式来检查名称至少是两个单词,并且不包含数字或特殊字符,例如!"#¤%&/()=...,但是这些单词可以包含æ,é,Â等字符。

可接受的名称的示例为:“ JohnElkjærd”或“AndréSvenson”。

不可接受的名称为:“ ”,“ H nn Andersen”或“ Martin Henriksen ”。

如果重要的话,我使用javascript

.match()函数客户端,并希望使用php的preg_replace()唯一“负面”服务器端。(删除不匹配的字符)。

任何帮助将非常感激。

好的,多亏了Alix Axel的回答,但是正如LightWing答案中的页面所建议的那样,我无法找到有关对javascript的unicode支持的任何信息,因此我最终为客户端提供了一半的解决方案,仅检查了至少两个单词和最少5个字符,如下所示:

if(name.match(/\S+/g).length >= minWords && name.length >= 5) {

//valid

}

一种替代方法是按照shifty的答案中的建议指定所有unicode字符,我可能最终会像上面的解决方案那样做类似的事情,但这有点不切实际。

回答:

尝试以下正则表达式:

^(?:[\p{L}\p{Mn}\p{Pd}\'\x{2019}]+\s[\p{L}\p{Mn}\p{Pd}\'\x{2019}]+\s?)+$

在PHP中,这转换为:

if (preg_match('~^(?:[\p{L}\p{Mn}\p{Pd}\'\x{2019}]+\s[\p{L}\p{Mn}\p{Pd}\'\x{2019}]+\s?)+$~u', $name) > 0)

{

// valid

}

您应该这样阅读:

^   # start of subject

(?: # match this:

[ # match a:

\p{L} # Unicode letter, or

\p{Mn} # Unicode accents, or

\p{Pd} # Unicode hyphens, or

\' # single quote, or

\x{2019} # single quote (alternative)

]+ # one or more times

\s # any kind of space

[ #match a:

\p{L} # Unicode letter, or

\p{Mn} # Unicode accents, or

\p{Pd} # Unicode hyphens, or

\' # single quote, or

\x{2019} # single quote (alternative)

]+ # one or more times

\s? # any kind of space (0 or more times)

)+ # one or more times

$ # end of subject

老实说,我不知道如何将其移植到Javascript,我什至不确定Javascript是否支持Unicode属性,但是在PHP PCRE中,@

IDEOne.com似乎可以完美地工作:

$names = array

(

'Alix',

'André Svenson',

'H4nn3 Andersen',

'Hans',

'John Elkjærd',

'Kristoffer la Cour',

'Marco d\'Almeida',

'Martin Henriksen!',

);

foreach ($names as $name)

{

echo sprintf('%s is %s' . "\n", $name, (preg_match('~^(?:[\p{L}\p{Mn}\p{Pd}\'\x{2019}]+\s[\p{L}\p{Mn}\p{Pd}\'\x{2019}]+\s?)+$~u', $name) > 0) ? 'valid' : 'invalid');

}

很抱歉,我无法在Javascript部分方面为您提供帮助,但可能有人会在这里帮您。



要替换无效字符,尽管我不确定为什么需要这样做,但您只需要对其稍作更改即可:

$name = preg_replace('~[^\p{L}\p{Mn}\p{Pd}\'\x{2019}\s]~u', '$1', $name);

请注意,您始终需要使用 u 修饰符。

以上是 带有特殊字符的名称的正则表达式(Unicode) 的全部内容, 来源链接: utcz.com/qa/402949.html

回到顶部