Avatar billede chrisrj Forsker
02. oktober 2018 - 15:04 Der er 6 kommentarer og
1 løsning

Regex - navn

Hejsa

Jeg står og skal bruge et regex til et navn.

Jeg har prøvet med denne, men den tillader mellemrum i navnet og det duer ikke.
XRegExp("^\\p{L}+$");

Så hvordan pokker skal den se ud?? Regex er ikke just min stærke side... :-/

Den skulle meget gerne give mulighed for alle navne, uanset hvor i verden man kommer fra.
Avatar billede Slater Ekspert
02. oktober 2018 - 15:27 #1
Hvad er et navn?

Siden du siger der ikke må være mellemrum, går jeg ud fra det kun er et fornavn eller et efternavn, du er ude efter. Men selv der, hvis det skal være fra hele verden, er der jo stort set ingen regler. Nogle er korte, nogle er lange, nogle har mærkelige tegn og store og små bogstaver, nogle har mellemrum, og hvad med navne skrevet på andre sprog med andre tegnsæt, som f.eks. kinesisk eller arabisk?

Du kan ikke lave et regex uden først at forstå præcis hvad du vil fange. Og er det til validering alene, eller håber du på at fange et navn midt i en vilkårlig sætning? For det er komplet umuligt.
Avatar billede chrisrj Forsker
02. oktober 2018 - 15:37 #2
Ok, lad mig præcisere:

Det er et brugernavn, men hvor det skal være ok at bruge, som du siger, "mærkelige tegn". Da det ikke kun skal virke på web, men også sms er jeg nødt til at begrænse dem til at skrive det i eet ord. Det vil komplicerer sms koden for meget hvis de skulle have mulighed for at skrive deres navn i flere ord.
Og ja, et navn kan være alt mellem 1 tegn og n tegn. :) Dér har databasen så begrænsning på 100 tegn - hvilket vel burde være nok! :D
Avatar billede Slater Ekspert
02. oktober 2018 - 15:42 #3
Hvis den eneste regel er, at det ikke må indeholde whitespace, kan du f.eks. bruge:

/^[^\s]+$/

Det tillader alt andet end \s, som er whitespace som mellemrum, tab eller linjeskift.

Hvis der skal være flere krav, er du nødt til at præcisere mere. Det er jo helt subjektivt hvor man sætter grænsen for hvad der er acceptabelt i et brugernavn.
Avatar billede chrisrj Forsker
02. oktober 2018 - 15:45 #4
Hmm..

Jeg prøvede med test t test - gik igennem uden problemer. :(

Min kode:
re = /^[^\s]+$/;
    if(!re.test(form.username.value)) {
        alert("Username cannot contain spaces. Please try again");
        form.username.focus();
        return false;
    }
Avatar billede Slater Ekspert
02. oktober 2018 - 15:48 #5
Er du sikker på at form.username.value indeholder hvad du tror? For jeg har lige testet det i en jsfiddle, og den kode virker fint.

http://jsfiddle.net/k1szhyma/
Avatar billede chrisrj Forsker
02. oktober 2018 - 16:02 #6
Den plejer da at virke.. :D
Den brokker sig, hvis man ikke udfylder brugernavn

Her er min join side:
...
...
        <script type="text/JavaScript" src="includes/js/func.js"></script>
        <script src="https://unpkg.com/xregexp/xregexp-all.js"></script>
...
...

<form action="includes/registre.inc.php" method="post" name="signup_form">
                        <br />
                        <input id="username" name="username" placeholder="<?=$InputUsernamePlaceholderText?>" type="text">
                        <br />
                        <input id="password" name="password" placeholder="<?=$InputNewPasswordText?>" type="password">
                        <br />
                        <input id="conf" name="conf" placeholder="<?=$RepeatNewPasswordText?>" type="password">
                        <br />
                        <input class="button" name="submit" type="submit" value="<?=$JoinButtonText?>" onclick="return regformhash(this.form, '', this.form.username, this.form.password, this.form.conf);" ><br />
                </form>

js funktionen:

function regformhash(form, uid, username, password, conf) {
    // Check each field has a value
    if (uid.value == ''        ||
          username.value == ''    ||
          password.value == ''  ||
          conf.value == '') {

        alert('You must provide all the requested details. Please try again');
        return false;
    }


re = /^[^\s]+$/;
    if(!re.test(form.username.value)) {
        alert("Username cannot contain spaces. Please try again");
        form.username.focus();
        return false;
    }
...
...
}
Avatar billede chrisrj Forsker
02. oktober 2018 - 16:05 #7
Arg, NU virker den!

Jeg manglede at opdatere browservinduet! Suk.

Jeg takker og bukker. :) :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester