Javascript érvényesítési reguláris kifejezés nevekhez
Olyan neveket szeretnék elfogadni az alkalmazásomban, amelyek betűket és kötőjeleket vagy gondolatjeleket tartalmaznak, a kódomat egy itt talált válasz alapján készítettem el, és így kódoltam:
function validName(n){
var nameRegex = /^[a-zA-Z\-]+$/;
if(n.match(nameRegex) == null){
return "Wrong";
}
else{
return "Right";
}
}
az egyetlen probléma az, hogy elfogadja a kötőjelet első betűként (akár többször is), amit én nem akarok. köszönöm
Válasz #1
Használjon negatív előrebocsátó állítást a kötőjellel kezdődő karakterláncok elkerülésére. Bár nincs szükség a - karakter elmenekítésére a karakterosztály végén, ha ott szerepel. Használja a - eltávolított karakterosztályt a kötőjel végén való elkerüléséhez, vagy használjon előrebocsátó állítást.
var nameRegex = /^(?!-)[a-zA-Z-]*[a-zA-Z]$/;
// or
var nameRegex = /^(?!-)(?!.*-$)[a-zA-Z-]+$/;
var nameRegex = /^(?!-)[a-zA-Z-]*[a-zA-Z]$/;
// or
var nameRegex1 = /^(?!-)(?!.*-$)[a-zA-Z-]+$/;
function validName(n) {
if (n.match(nameRegex) == null) {
return "Wrong";
} else {
return "Right";
}
}
function validName1(n) {
if (n.match(nameRegex1) == null) {
return "Wrong";
} else {
return "Right";
}
}
console.log(validName('abc'));
console.log(validName('abc-'));
console.log(validName('-abc'));
console.log(validName('-abc-'));
console.log(validName('a-b-c'));
console.log(validName1('abc'));
console.log(validName1('abc-'));
console.log(validName1('-abc'));
console.log(validName1('-abc-'));
console.log(validName1('a-b-c'));Tájékoztatásul: Használhatod a RegExp#test metódust a regex-illeszkedés keresésére, amely logikai értéket ad vissza a regex-illeszkedés alapján.
if(nameRegex.test(n)){
return "Right";
}
else{
return "Wrong";
}
FRISSÍTÉS: Ha csak egyetlen opcionális
--t szeretne a szavak között, használjon 0 vagy több ismétlődő csoportot, amelyek - karakterekkel kezdődnek, amint azt @WiktorStribiżew válaszában említettük.var nameRegex = /^[a-zA-Z]+(?:-[a-zA-Z]+)*$/;
Válasz #2
Azt kell tenned, hogy a egy karakterosztályodat bontsd két részre, a kötőjelet tedd ki belőle, és használj egy csoportosító szerkezetet a kötőjel + alfanumerikus karakterek sorozatának egyezéséhez:
var nameRegex = /^[a-zA-Z]+(?:-[a-zA-Z]+)*$/;
Nézze meg a regex demót
Ez azonosítja az alfanumerikus karaktereket (1 vagy több) a string elején, majd 0 vagy több előfordulását a - + egy vagy több alfanumerikus karakter kombinációnak a string végéig.
Ha a karakterláncban csak 1 kötőjel lehet, cserélje le a * végét ?-re (lásd a regex demót).
Ha azt is engedélyezni szeretnéd, hogy szóköz legyen az alfanumerikus karakterek között, cseréld le a --t [\s-]-re (demo).
