我已经尝试了一段时间并且失败了,对正则表达式不是那么好,我需要的是以下内容:
用户名(人名不是用户名)
它可以包括 - 因为某些名称中包含连字符(允许最多2个)
它可以包含一个空格(最多3个)
它不能包含数字,必须以不是连字符的字母开头
它必须至少有3个字符,最多30个
它必须适用于非英文字母的人(例如Agnès)
我尝试了这个,但它失败了,它允许以数字开头但没有 接受非英语字母,如è或ï
^[a-zA-Z\-]{3,30}$
任何帮助都将受到高度赞赏,我认为这将有助于许多程序员搜索SO
答案 0 :(得分:0)
我认为这可能就是答案:
/** Check if name is valid.
* @param {String} name
* @returns {Boolean}
*/
const validateName = (name) => {
name = name.trim().replace(/\s+/, ' ')
if (name.length > 30 || name.length < 3) return false // length is too long or too short
if ((name.match(/-/g) || []).length > 2) return false // more than 2 '-' found
if ((name.match(/\s+/g) || []).length > 3) return false // more than 3 'whitespace chains' found
if (name.match(/[~`!@#$%^&*()_=+\d[\]{}\\|:;"'<>,.\/?]/)) return false // not alowed char found
name = name.split(/\s+/g)
for (let part of name)
if (part[0] === '-') return false // part of name starts with -
return true
}
console.log(`Agnès Jaszenko: ${validateName("Agnès Jaszenko")}`) // valid
console.log(`Ag: ${validateName("Ag")}`) // too short
console.log(`Aga-ta roko-la-foo: ${validateName("Aga-ta roko-la-foo")}`) // too many -
console.log(`Agata Jolanta Krzyżtofska-Brzęczyszczewiczykówna: ${validateName("Agata Jolanta Krzyżtofska-Brzęczyszczewiczykówna")}`) // to long
console.log(` Pan Janusz Kocioł : ${validateName(" Pan Janusz Kocioł ")}`) // valid
console.log(`Maciej Kozieja: ${validateName("Maciej Kozieja")}`) // fancy :3 hah :P - valid
console.log(`-Łarjusz Miętocha: ${validateName("-Łarjusz Miętocha")}`) // starting with -
console.log(`Łarjusz@ Miętocha: ${validateName("Łarjusz@ Miętocha")}`) // not alowed char
console.log(`محمد: ${validateName("محمد")}`) // valid with arabic symbols
console.log(`مح1مد: ${validateName("مح1مد")}`) // not valid char found
您可以修改此代码并向用户返回有关无效内容的信息,或者只是像这样使用它 希望它适合你:D
第1步 .trim()
在开始和结束时删除所有空格
第2步 .replace(/\s+/, ' ')
将所有空格替换为exacly one space(这样做可以使'Name Name'
有效并且'缩短长度' - 实际的单词数量)
第3步 name.length > 30 || name.length < 3
检查长度
第4步 name.match(/-/g)
计算' - '
遗憾的是,当他们没有计数匹配和简单的名称。匹配(/ - / g)。长度会在没有找到匹配时中断,这就是为什么我们必须使用''''''''''''''''''''' />
第5步 name.match(/\s+/g)
计算空格
第6步 name.match(/[~`!@#$%^&*()_=+\d[\]{}\\|:;"'<>,.\/?]/)
检查姓名是否包含任何未归属的字符
遗憾的是,如您所知\d
不足以检查所有语言,但您可以撤消此过程并检查名称是否包含任何不允许的字符
第7步检查单词的一部分是否以 -
开头
第8步如果所有测试都通过了您的名字,并且返回了true
,那么
/** Check if name is valid.
* @param {String} name
* @returns {Boolean}
*/
const validateName = (name) => {
name = name.trim().replace(/\s+/g, ' ')
if (name.length > 30 || name.length < 3) return false // length is too long or too short
if ((name.match(/-/g) || []).length > 2) return false // more than 2 '-' found
if ((name.match(/\s+/g) || []).length > 3) return false // more than 3 'whitespace chains' found
if (name.match(/[~`!@#$%^&*()_=+\d[\]{}\\|:;"'<>,.\/?]/)) return false // not alowed char found
name = name.split(/\s+/g)
for (let part of name)
if (part[0] === '-') return false // part of name starts with -
return true
}
const input = document.createElement('input')
const valid = document.createElement('p')
input.addEventListener('keyup', () =>{
valid.innerHTML = validateName(input.value)
})
document.body.append(input)
document.body.append(valid)