Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.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
JavaScript正则表达式有效名称_Javascript_Regex - Fatal编程技术网

JavaScript正则表达式有效名称

JavaScript正则表达式有效名称,javascript,regex,Javascript,Regex,我想创建一个JavaScript正则表达式来检查有效名称 最少2个字符(空间无法计数) 允许某些特殊字符的空格(ëë…) 我知道如何写一些单独的,但不合并 如果我使用/^([A-Za-zëë]{2,40})$/,用户可以输入两个空格作为名称 如果我使用/^([A-Za-z]{2,40}[ëë]{0,40})$/,用户必须先使用2个字母,在使用空格或特殊字符后,不能再使用字母 搜索了一点,但很难为我的问题定义搜索字符串。有什么想法吗?为什么没有 var reg= /^([A-Za-z]{2}[

我想创建一个JavaScript正则表达式来检查有效名称

  • 最少2个字符(空间无法计数)
  • 允许某些特殊字符的空格(
    ëë
    …)
我知道如何写一些单独的,但不合并

如果我使用
/^([A-Za-zëë]{2,40})$/
,用户可以输入两个空格作为名称

如果我使用
/^([A-Za-z]{2,40}[ëë]{0,40})$/
,用户必须先使用2个字母,在使用空格或特殊字符后,不能再使用字母

搜索了一点,但很难为我的问题定义搜索字符串。有什么想法吗?

为什么没有

var reg= /^([A-Za-z]{2}[ éàëA-Za-z]*)$/;
2个字母,然后是任意多的空格、字母或特殊字符

但我不允许用户名中有空格——如果你有像这样的用户名,那就麻烦了

ab         ba 
谁会记得他们使用了多少空格?

您可以这样做:

/^([A-Za-zéàë]{2,40} ?)+$/

2-40个字符,然后可选空格,至少重复一次。这将在末端留出一个空间,但您可以单独修剪。

请,请不要这样做。你只会告诉人们他们的名字是无效的,从而使他们感到不安。你的计划可能会拒绝的几个姓氏示例:
O'Neill
Sørensen
。试图涵盖所有这些案件和更多案件注定要失败

就这样做吧:

  • 带材前、后坯料
  • 将连续空格折叠到一个空格中
  • 检查结果是否为空
在JavaScript中,这看起来像:

name = name.replace(/^\s+/, "").replace(/\s+$/, "").replace(/\s+/, " ");
if (name == "") {
  // show error
} else {
  // valid: maybe put trimmed name back into form
}

在“修剪”输入值之后,以下内容将仅对拉丁姓氏的请求进行数学计算

rn = new RegExp("([\w\u00C0-\u02AB']+ ?)+","gi");
m = ln.match(rn);
valid = (m && m.length)? true: false;
请注意,我使用的是“+”而不是“{2,}”,这是因为有些姓氏在单独的单词中只使用一个字母,如“Ortega y Gasset”

您可以看到我没有使用RegExp.test,这是因为该方法无法正常工作(我不知道为什么,但您可能会看到它的失败率很高)

在我的国家,来自非拉丁语国家的人通常会翻译他们的名字,所以前面的RegExp就足够了。但是,如果你试图匹配世界上的任何姓氏,你可以添加更多的\u######字符,避免包含符号、数字或其他类型。或者图书馆可能会帮助你


另外,请不要忘记在服务器端测试输入,并在将其用于sql语句之前对其进行转义(如果您有)

我想提出一个正则表达式,它可以将所有基于拉丁语的语言与其特殊字符相匹配:


<> P.S.我已经包括了所有我能找到的字符,但是请随意编辑,以防我漏掉任何一个。

< P>大多数解决方案不考虑可能存在的许多不同的名称。可以有两个字符,如<强> A>强>或<强> B< <强>或某人写的名字如<强> F. Middlename Lastna。我

RegExp
将验证大多数名称,但您可以根据需要对其进行优化:

/^[a-z\u00C0-\u02AB'´`]+\.?\s([a-z\u00C0-\u02AB'´`]+\.?\s?)+$/i
这将允许:

  • 李黄武
  • 塞瓦希尔Özgür
  • 伊奥吉特·艾登
  • 芬拉乌诺·博伊文
  • 诺里斯
  • 塔蒂亚娜·兹拉塔·兹德拉夫科夫
  • 阿里阿德娜·伊丽莎贝特·奥泰德
  • 谢尔盖·利塞特·赖恩德斯
  • 布丽安娜·诺米娜·霍普特
  • 比霍茨·阿蒙·巴甫洛夫
  • 伊奥甘·穆尔多·斯坦内克
  • 菲利梅娜J.范德文
  • D.布莱尔·华莱士
但将允许:

  • 雪莉24
  • 6688
  • 拉乌伊布提哈吉
  • hippolyte@example.com
  • Cy4n 4ur0r4 Blyth3 3ll1
  • 贾斯蒂斯内
  • 丹尼

如果名称需要大写、大写、小写、修剪或单间距,这是格式化程序应该做的任务,而不是用户。

Sooo,如果名称中有您不允许的字符,人们会怎么办???@loganfsmyth他们会得到一个新名称;)如果您想去掉正则表达式本身中的空格,请使用非捕获组
/^(?([A-Za-zëëë]{2,40})+$/
@loganfsmyth我的意思是,将正则表达式(比如,
test
)应用于像
“bob barker”
这样的字符串将导致
true
,因为末尾有空格,您可能希望它是
false
。哦,是的,我一定是误解了:P实际上是用来填写表格的,并且用来检查姓氏。因为有很多姓氏里面都有空格,所以我想把它们包括进去。但正如您所指出的,您的脚本可以在一行中使用许多空格。是否有一个简单的解决方案允许使用空格,但一次只能使用一个,这样您就可以有一个姓氏,如:van den borre(并且仍然拒绝使用van den borre这样的姓氏)?对于那些只允许使用拉丁字母字符的人来说,我相信这是最好的选择。我只在圣地亚哥的正则表达式中添加了破折号:
/^[a-z\u00C0-\u02AB''''''`-]+\.?\s([a-z\u00C0-\u02AB''''''''`-]+\.?\s?)+$/I
。此外,对于unicode字符,可以使用相同的方法添加其他可能性。顺便说一下,我在javascript.Updated版本中使用了它(更灵活一些):
/^[a-z\u00C0-\u02AB'´`]+\.?\s([a-z\u00C0-\u02AB'´`]+\.?\s?)+$/i